设置3D OpenGL透视投影的最简单方法

时间:2012-04-28 03:04:00

标签: c opengl

有很多教程,每个教程都建议使用gluPerspectiveglFrustum以及其他内容,但我在设置正确的矩阵时遇到了困难。我需要用什么代码设置向下看+ z轴的45˚透视图?

到目前为止,我有:

glShadeModel(GL_SMOOTH);
glClearColor(0,0,0,0);
glClearDepth(1);
glDepthFunc(GL_LEQUAL);
glViewport(0,0,width,height);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45,1,0.1,100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

但这似乎不起作用。当我试图画画时,我得到的只是黑屏。

编辑:这是最小的绘图代码:

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3ub(255,255,255);
glBegin(GL_TRIANGLE_STRIP);
 glVertex3f(20,20,20);
 glVertex3f(20,30,20);
 glVertex3f(30,20,20);
 glVertex3f(30,30,20);
glEnd();

2 个答案:

答案 0 :(得分:2)

  

诸如(1,1,1)和(2,50,23)点之类的东西。它们没有出现。

那是你的问题。默认的OpenGL摄像机的+ Z轴指向朝向摄像机。并且由于相机处于Z = 0,所以Z位置> 0的任何位置都在相机后面。

将您的点移动到相机前面。他们至少需要一个-Z的位置。

答案 1 :(得分:1)

  

编辑:这是最小的绘图代码:

glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3ub(255,255,255);
glBegin(GL_TRIANGLE_STRIP);
 glVertex3f(20,20,20);
 glVertex3f(20,30,20);
 glVertex3f(30,20,20);
 glVertex3f(30,30,20);
glEnd();

您的顶点坐标位于查看体积之外。首先,OpenGL默认情况下“向下看”负Z轴,所以你的Z坐标必须是-100 < z&lt; -0.1用于选择近和远剪裁平面。

但即使您在Z坐标上翻转了标记,您的顶点仍然会位于45°FOV之外。 (20,0,20)与观察轴成45°,并且(30,0,20)甚至更远。尝试将顶点坐标围绕(0,0,-5)居中,如(+/- 1,+ / - 1,-5)