0
我想显示从 - ( - 50,-50,-50)延伸至(50,50,50)的盒子的五面(仅显示顶面)。我的立体绘图功能如下:为什么我的立方体的边不显示?
void drawRectangularPrism(Coordinate corner, Coordinate dimensions)
{
glPushMatrix();
glBegin(GL_QUADS);
// back face
glNormal3f(0, 0, 1);
glVertex3f(corner.x, corner.y, corner.z);
glVertex3f(corner.x + dimensions.x, corner.y, corner.z);
glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z);
glVertex3f(corner.x, corner.y + dimensions.y, corner.z);
// bottom face
glNormal3f(0, 1, 0);
glVertex3f(corner.x, corner.y, corner.z);
glVertex3f(corner.x, corner.y, corner.z + dimensions.z);
glVertex3f(corner.x + dimensions.x, corner.y, corner.z + dimensions.z);
glVertex3f(corner.x + dimensions.x, corner.y, corner.z);
// top face
glNormal3f(0, -1, 0);
glVertex3f(corner.x, corner.y + dimensions.y, corner.z);
glVertex3f(corner.x, corner.y + dimensions.y, corner.z + dimensions.z);
glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z + dimensions.z);
glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z);
// right face
glNormal3f(-1, 0, 0);
glVertex3f(corner.x + dimensions.x, corner.y, corner.z);
glVertex3f(corner.x + dimensions.x, corner.y, corner.z + dimensions.z);
glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z + dimensions.z);
glVertex3f(corner.x + dimensions.x, corner.y + dimensions.y, corner.z);
// left face
glNormal3f(1, 0, 0);
glVertex3f(corner.x, corner.y, corner.z);
glVertex3f(corner.x, corner.y, corner.z + dimensions.z);
glVertex3f(corner.x, corner.y + dimensions.y, corner.z + dimensions.z);
glVertex3f(corner.x, corner.y + dimensions.y, corner.z);
glEnd();
glPopMatrix();
}
而如果它是有用的,这里是我的功能,设置了OpenGL渲染:
void init()
{
glClearColor(1.0, 1.0, 1.0, 1.0); // Clear the background of our window to white
GLfloat specular[] = {1.0, 1.0, 1.0, 1.0}, shininess[] = {50.0}, emission[] = {0.0, 0.0, 0.0, 1.0},
lightPosition[] = {1.0, 1.0, 1.0, 0.0}, lightAmbient[] = {0.0, 0.0, 0.0, 1.0},
lightDiffuse[] = {1.0, 1.0, 1.0, 1.0}, lightSpecular[] = {1.0, 1.0, 0.0, 1.0};
glShadeModel(GL_SMOOTH);
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission);
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, lightSpecular);
glEnable(GL_LIGHT0);
//glEnable(GL_DEPTH_TEST); // makes objects overlap correctly/or not?!
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_CULL_FACE); // makes it faster?!
}
最终结果:
为什么不显示立方体的顶部和左侧?
您是否尝试过单独绘制每一面以确定哪一面未按照您的预期绘制? –
@DavidBrown你是什么意思?通过评论所有的一方,看看它是否真的没有被绘制?那么是的,事实证明,单独绘制时,每个单面都仍然被绘制,除了左面和上面。 – wrongusername