2011-12-19 3 views
0

- ( - 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

それぞれの面を個別に描画して、どちらの面が期待どおりに描画されていないか把握しましたか? –

+0

@DavidBrownどういう意味ですか?実際に描画されていないかどうかを確認するために、片側を除いてすべてコメントします。それで、はい、それは左と上の面を除いて、単独で描画されたときに、すべての片面がまだ描画されていることが分かります。 – wrongusername

答えて

3

トップ/ボトムを動作するはずです、左/右の顔のペアは「あなたの避難所を示唆している、オフセットにより異なります頂点の順番を考慮する。まず、glFrontFaceを見てください。

0

あなたの大腿四頭筋が最も可能性が高い、それを削除し

glEnable(GL_CULL_FACE); 

離れ淘汰されており、それが

関連する問題