私の立方体の側面が表示されないのはなぜですか?

- ( - 50、-50、-50)から(50、50、50)までの5辺を表示したいです(上辺だけは表示されません)。キューブ描画機能は次のとおりです。

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?!
}

最終結果:

well something's wrong!

キューブの上辺と左辺が表示されないのはなぜですか?

0
@DavidBrownどういう意味ですか?実際に描画されていないかどうかを確認するために、片側を除いてすべてコメントします。それで、はい、それは左と上の面を除いて、単独で描画されたときに、すべての片面がまだ描画されていることが分かります。
追加された 著者 wrongusername,
あなたは、それぞれの面を個別に描いてみて、あなたが期待したようにどちらの面が描かれていないのか把握しましたか?
追加された 著者 David Brown,

2 答え

Top/Bottom、Left/Rightの面のペアはオフセットだけで変化します。これは頂点の順番を考慮していないことを示しています。まず、 glFrontFace を見てください。

3
追加された

あなたのクワッドは、

glEnable(GL_CULL_FACE);

それを取り外すとうまくいくはずです

0
追加された