显示 3D 三角形的旋转
Display rotation of 3D triangle
我试图显示一个相对于 y 轴旋转的三角形。但我无法正确显示它。我该如何解决?我的代码有什么问题
初始化:
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);
我试图显示一个相对于 y 轴旋转的三角形。但我无法正确显示它。我该如何解决?我的代码有什么问题
初始化:
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);