【问题标题】:OpenGL. gluLookAt function not workingOpenGL。 gluLookAt 功能不起作用
【发布时间】:2014-05-09 23:53:19
【问题描述】:

这是我用我的程序绘制的图像:

[IMG]http://i62.tinypic.com/j163j8.png[/IMG]

它应该是 3D 的。当我尝试使用 gluLookAt 进行检查时:

GL.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);  
GL.glLoadIdentity();
GL.glMatrixMode(GL.GL_MODELVIEW);

glu.gluLookAt(
5.0, 2.0, 2.0,
0.0, 0.0, 0.0,
0.0, 0.0, 0.0);

figura(drawable);   //Drawing figure 
GL.glFlush();

它只显示白屏,或者一秒钟的混乱数字,然后它就熄灭了。如果我不理解好的前 3 个坐标显示观点,第二个 3 显示查看目的地,第三个 3 显示旋转轴。但是这个功能只会把一切搞砸。

感谢您的回答。

【问题讨论】:

  • 第三个3是“向上”向量,试试glu.gluLookAt(5.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
  • @AnthonyVallée-Dubois 如果眼睛与目标在同一个 XZ 平面上,那将是一个有效的向上向量,即。 {5, 0, 2} 而不是 {5, 2, 2}。
  • @schmop 也许我错了,因为已经有一段时间了,但我的理解是向上向量由gluLookAt() 重新计算为垂直于方向向量,例如side = cross(dir, up); up = cross(side, dir);。见:opengl.org/wiki/GluLookAt_code
  • @schmop 在任何情况下自己计算都没有错,你的答案是正确的。
  • @AnthonyVallée-Dubois 哦。这非常方便!我自己 10 年没用过 gluLookAt...

标签: glulookat


【解决方案1】:

最后三个参数并不完全是旋转,而是“向上”向量。如果你不想要一个扭曲的视图,向上的向量应该垂直于你的方向向量,这里是 {-5, -2, -2}。在所有垂直向量中,您将选择的一个将定义您所称的旋转。

在您的示例中,最向上的垂直向量(例如,您将在第一人称游戏中使用的向量)在标准化后将是 {-.323, .937, -.129}。我首先通过找到“左”向量(绝对向上 {0,1,0} 和方向之间的叉积),然后作为方向和“左”之间的叉积来计算它。

【讨论】:

  • gluLookAt() 相对于眼睛向量对向上向量进行正交归一化。无需手动执行此操作。见manpagez.com/man/3/gluLookAt
  • @RetoKoradi 好的。这在 OpenGL 参考页面中并不是很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多