glFrustum()与gluLookAt()相比较的解释

时间:2016-07-06 11:26:16

标签: c++ opengl glut freeglut

我正在调试一个代码,我想查看深度图像的扫描,但我的相机设置不让我看到扫描。因此,我正在玩相机设置。我创造了一个巨大的点(30,120,800),我可以使用gluLookAt看到它。 glFrustum(左,右,下,上,近,远)的相应设置是什么?使用我的设置,该点应该正好位于中心,但我看不到它。

void onDisplay()
{
glEnable(GL_NORMALIZE);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glDisable(GL_CULL_FACE);
glPushMatrix();
glPointSize( 1111111116.0 );
glColor3f( 0.25f, 0.907, 0.731f );
glLoadIdentity();
// Set the camera
//gluLookAt(    30.f, 120.0f, 800.f, 30.f, 120.0f, 800.f, 0.0f, 1.f,  0.0f); //works
glFrustum( 28, 32,     118,     122,   798,     802);
glBegin( GL_POINTS );


glVertex3f( 30, 120, 800 );    //30,120,800

glEnd();

glPopMatrix();
//glFinish();
//glutSwapBuffers();
glutSwapBuffers();
glutPostRedisplay();
}

int main(int argc, char **argv)
{
// initialize GLUT
glutInitWindowSize(800, 800);

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

glutInit(&argc, argv);

glutCreateWindow("HeadPoseDemo");


glutKeyboardFunc (processSpecialKeys);

glutDisplayFunc(onDisplay);
glutMainLoop();
return 0;
}

1 个答案:

答案 0 :(得分:2)

细节中的魔鬼:注意他们所说的文件中的内容

  

nearVal,farVal

     

指定近距离和远距离剪切平面的距离。两个距离必须是正的。

这与他们用于其他参数的措辞不同:

  

左,右

     

指定左侧和右侧垂直剪裁平面的坐标

您应该知道的是,您正沿着负z轴观察。所以我的猜测是,当您将其更改为glVertex3f(30.f, 120.f, -800.f);时,您会看到自己的观点。