0

私はかなり奇妙な問題を抱えています。これらのスクリーンショットを見てください:

img1

img2

img3

img4

そのオブジェクトのコード:

void prostopadloscian(float x, float y, float z, float red, float green, float blue)
{
    glBegin(GL_QUADS);
        glColor3f(red, green, blue);

        glNormal3f(-x,-y,-z);
        glVertex3f(-x,-y,-z);
        glNormal3f(x,-y,-z);
        glVertex3f(x,-y,-z);
        glNormal3f(x,-y,z);
        glVertex3f(x,-y,z);
        glNormal3f(-x,-y,z);
        glVertex3f(-x,-y,z);

        glNormal3f(-x,y,-z);
        glVertex3f(-x,y,-z);
        glNormal3f(x,y,-z);
        glVertex3f(x,y,-z);
        glNormal3f(x,y,z);
        glVertex3f(x,y,z);
        glNormal3f(-x,y,z);
        glVertex3f(-x,y,z);

        glNormal3f(-x,y,z);
        glVertex3f(-x,y,z);
        glNormal3f(-x,-y,z);
        glVertex3f(-x,-y,z);
        glNormal3f(-x,-y,-z);
        glVertex3f(-x,-y,-z);
        glNormal3f(-x,y,-z);
        glVertex3f(-x,y,-z);

        glNormal3f(-x,-y,-z);
        glVertex3f(-x,-y,-z);
        glNormal3f(x,-y,-z);
        glVertex3f(x,-y,-z);
        glNormal3f(x,y,-z);
        glVertex3f(x,y,-z);
        glNormal3f(-x,y,-z);
        glVertex3f(-x,y,-z);

        glNormal3f(x,y,z);
        glVertex3f(x,y,z);
        glNormal3f(x,-y,z);
        glVertex3f(x,-y,z);
        glNormal3f(x,-y,-z);
        glVertex3f(x,-y,-z);
        glNormal3f(x,y,-z);
        glVertex3f(x,y,-z);

        glNormal3f(-x,y,z);
        glVertex3f(-x,y,z);
        glNormal3f(-x,-y,z);
        glVertex3f(-x,-y,z);
        glNormal3f(-x,-y,-z);
        glVertex3f(-x,-y,-z);
        glNormal3f(-x,y,-z);
        glVertex3f(-x,y,-z);
    glEnd();
}
    void bed()
    {
        glPushMatrix();
            glTranslatef(-1.6, 0, 4.6);
            prostopadloscian(0.2, 0.25, 0.2, 0.35, 0.16, 0.14);
        glPopMatrix();
        glPushMatrix();
            glTranslatef(1.6, 0, 4.6);
            prostopadloscian(0.2, 0.25, 0.2, 0.35, 0.16, 0.14);
        glPopMatrix();
        glPushMatrix();
            glTranslatef(-1.6, 0, -4.6);
            prostopadloscian(0.2, 0.25, 0.2, 0.35, 0.16, 0.14);
        glPopMatrix();
        glPushMatrix();
            glTranslatef(1.6, 0, -4.6);
            prostopadloscian(0.2, 0.25, 0.2, 0.35, 0.16, 0.14);
        glPopMatrix();

        glPushMatrix();
            glTranslatef(0.0, 0.55, 0.0);
            prostopadloscian(2,0.3,5,0.85,0.85,0.95);
        glPopMatrix();
    }

私のdisplay()関数はで始まります

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0, 1.0, 1.0, 1.0); 

glEnable(GL_DEPTH_TEST);
glDisable(GL_TEXTURE_2D);
glLoadIdentity();

この醜い効果を取り除く方法は?

4

2 に答える 2

2

ええ、それらのプロストパッドロスアンは少し奇妙に見えます. これらのショットから確実に言うのは難しいですが、注目すべき点がいくつかあります。

  • 背面カリングは有効になっていますか?
  • もしそうなら、正しい順序で頂点を指定していますか?
  • 前面と背面のクリッピング プレーンが離れすぎていませんか?
  • 深度バッファには、使用しているクリッピング プレーン距離に対して十分なビットがありますか?
  • 法線はすべて正しい方向を向いていますか? (ヒント: いいえ。トリッキーでない限り、それぞれの顔に必要なglNormal呼び出しは 1 回だけです。)
于 2012-06-21T18:18:32.007 に答える
1

その効果が断続的であれば、Zファイティングが発生しているのではないかと思います。glPolygonOffsetを使用してテーブルトップを描画してみましたか?

于 2012-06-21T18:25:07.810 に答える