我正在努力学习,但我真的不明白。 使用:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_QUADS);
glVertex3f(-0.5, -0.5, 0.5);
glVertex3f(0.5, -0.5, 0.5);
glVertex3f(0.5, 0.5, 0.5);
glVertex3f(-0.5, 0.5, 0.5);
glEnd();
这是我在绘图程序中唯一做的事情。我画了一张脸,一切都好。
现在我希望看到相同的脸离观察者越来越远,所以我改变了Z坐标。问题是屏幕上显示的面部大小不会改变。
我尝试用glFrustum(-15, 15, -15, 15, 0.1, 15)
设置一个视锥体,但随后一切都消失了(脸不是在视锥体视图中?)。
我想要的只是画一张脸,设置一个平截头体并沿着Z坐标移动脸部,看着脸越来越大。我知道有GL_MODELVIEW
和GL_PROJECTION
,但我不明白它们是什么,也许这就是麻烦。
答案 0 :(得分:0)
在OpenGL中,按照惯例,相机朝向Z轴的负方向,即Z轴指向的屏幕。您的四边形位于Z = 0.5,有效位于相机后面。所以至少要看到你必须将四边形移动到负坐标:
glBegin(GL_QUADS);
glVertex3f(-0.5, -0.5, -0.5);
glVertex3f(0.5, -0.5, -0.5);
glVertex3f(0.5, 0.5, -0.5);
glVertex3f(-0.5, 0.5, -0.5);
glEnd();
您也可以旋转相机:
glMatrixMode(GL_PROJECTION);
glFrustum(-15, 15, -15, 15, 0.1, 15);
glMatrixMode(GL_MODELVIEW);
static const GLfloat m[] = { -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 };
glLoadMatrixf(m);
话虽这么说,你最好放弃传统的OpenGL固定管道功能,并自学可编程管道。