3

私はopenGLで正方形の部屋を描こうとしていますが、これがあります:

void drawWalls()
{

glColor3f(1,0,0);
glPushMatrix();
//glRotatef(0,0,0,1);
//glScalef(2,1,2);
glBegin(GL_QUADS);
/* Floor */
glVertex3f(-1,-1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,-1,1);
glVertex3f(-1,-1,1);
/* Ceiling */
glVertex3f(-1,1,-1);
glVertex3f(1,1,-1);
glVertex3f(1,1,1);
glVertex3f(-1,1,1);
    /* Walls */
glVertex3f(-1,-1,1);
glVertex3f(1,-1,1);
glVertex3f(1,1,1);
glVertex3f(-1,1,1);

glVertex3f(-1,-1,-1);
glVertex3f(1,-1,-1);
glVertex3f(1,1,-1);
glVertex3f(-1,1,-1);

glVertex3f(1,1,1);
glVertex3f(1,-1,1);
glVertex3f(1,-1,-1);
glVertex3f(1,1,-1);

glVertex3f(-1,1,1);
glVertex3f(-1,-1,1);
glVertex3f(-1,-1,-1);
glVertex3f(-1,1,-1);
glEnd();

glPopMatrix();

}

どういうわけか、それは私のすべての面を描いているわけではありません! ベクトルを調べたところ、正しいように見えます...しかし、内部を見ると、次のように表示されます。

壁

私は何を間違っていますか?または、可能であれば、これよりも部屋を描くためのより良い方法はありますか? ありがとう

4

1 に答える 1

4

床は時計回りに定義され、天井は反時計回りに定義されます (説明から暗示した法線に関して)。カリングが有効になっている場合、カメラとは反対側にあるすべてのクワッドは描画されません。

これを修正するには、フロアを次のように定義する必要があります。

(-1, -1, -1)
(-1, -1, 1)
(1, -1, 1)
(1, -1, -1)

表示されない他の壁にも同じことを行います。それらも反時計回りに定義するだけです。

于 2013-11-02T01:39:46.640 に答える