-1

我正在尝试使用此代码测试 gluLookAt。但我只能看到黑屏。这段代码有什么问题?我需要了解有关 glulookAt (或 opengl 相机)的任何基本概念吗?

glViewport(0,0,640,480);
glEnable(GL_DEPTH_TEST);
glClearColor(0,0,0,1);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluLookAt(0,0,5,0,0,0,0,0,1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glBegin(GL_POLYGON);
glColor3f(1, 0, 0);
glVertex2d(0.25, 0.25);
glVertex2d(-0.25, 0.25);
glVertex2d(-0.25, -0.25);
glVertex2d(0.25, -0.25);
glEnd();
4

1 回答 1

0

一个问题是向上向量的gluLookAt方向与观察方向相同。

您需要做的就是设置+Y,它应该可以工作......

gluLookAt(0, 0, 0.5, //position is +0.5 along Z (NOTE: 0.5, not 5. see below),
          0, 0, 0,   //looking at a 0.5x0.5 X/Y quad at the origin
          0, 1, 0    //rotated such that +Y is up
         );

另一个问题是不应将 gluLookAt 应用于投影矩阵。它现在可以工作,但稍后会破坏照明。将其移动到模型视图矩阵:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(... as before ...);

假设尚未设置投影矩阵,将from位置更改gluLookAt回您的位置5将使四边形消失。这是因为默认投影给出了正交 -1 到 1 立方体的查看体积。“相机”现在太远了,它什么也看不到。这是您要研究更改投影矩阵的地方。或许加大正射投影的大小glOrtho(),或者看成更复杂但自然的gluPerspective()

于 2014-10-15T11:55:00.087 回答