我试图展示一个相对于y轴旋转的三角形。但我不能恰当地展示它。我该如何解决?我的代码出了什么问题
init:
void init() {
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glClearColor(0.7f, 0.9f, 1.0f, 1.0f);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-30, 30, -30, 30, 30, 90);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
显示器:
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(0.0, 0.0f, 1.0f, 0.0f);
glBegin(GL_TRIANGLES);
glVertex3f(20.0f, 10.0f, -10.0f);
glVertex3f(50.0f, 15.0f, -20.0f);
glVertex3f(32.0f, 30.0f, -10.0f);
glEnd();
glutSwapBuffers();
}
模型围绕(0,0,0(旋转。不要沿负z轴平移顶点,而是将顶点排列在(0,0,0(周围,并在旋转模型后通过glTranslate
平移模型。例如:
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -60.0f);
glRotatef(0.0, 0.0f, 1.0f, 0.0f);
glBegin(GL_TRIANGLES);
glVertex3f(-15.0f, -10.0f, 5.0f);
glVertex3f(15.0f, -5.0f, -5.0f);
glVertex3f(-3.0f, 10.0f, 5.0f);
glEnd();
glutSwapBuffers();
}
请注意,必须确保模型位于透视投影的近平面和远平面之间。在你的情况下,近平面是30.0,远平面是90.0:
glFrustum(-30, 30, -30, 30, 30, 90);
所有不在近平面和远平面之间的几何体都将被剪裁。
由于你的几何体不是一个封闭的体积,我建议禁用面剔除:
glEnable(GL_CULL_FACE);