1

openglのテクスチャリングに奇妙な問題があります:

ここに画像の説明を入力してください

このシーンは、4つのテクスチャ付き二次曲面(床と3つの壁)で構成されるオープンボックスと、それぞれ翻訳、スケーリング、テクスチャ化されたgluSpheresから作られたいくつかの粗いキノコで構成されています。

特に床を見ると、二次曲面の半分のテクスチャが大きく歪んでいることがわかります。床のテクスチャ座標を3回チェックしましたが、問題はないようです(ご覧のとおり、他の3つの壁は問題なく、床と同じパターンに従います)。これは、私が使用するすべてのテクスチャで発生します(RAW RGBデータを使用しているだけです)。

きのこをシーンから外すと、反りがなくなります。本当に奇妙です。誰かがこれを見たことがありますか?私はopenglに比較的慣れていないので、これを見たときに何を探すべきかわかりませんでした。前もって感謝します。

編集:

ボックスのコード:

    void drawRoom(void) {
        glPushMatrix();
            glScalef(10,10,10);
            GLuint texture = LoadTextureRAW("cave_two.raw",1);
            glEnable(GL_TEXTURE_2D);
            glBegin(GL_QUADS);

            //Floor
            glVertex3f(-1,-1,-1); glTexCoord2f(0,0); glNormal3f(0,1,0);
            glVertex3f(1,-1,-1); glTexCoord2f(1,0); glNormal3f(0,1,0);
            glVertex3f(1,-1,1); glTexCoord2f(1.0,1.0); glNormal3f(0,1,0);
            glVertex3f(-1,-1,1); glTexCoord2f(0.0,1.0); glNormal3f(0,1,0);


            //Back wall
            glVertex3f(-1,-1,-1); glTexCoord2f(0,0); glNormal3f(0,0,1);
            glVertex3f(1,-1,-1); glTexCoord2f(1,0); glNormal3f(0,0,1);
            glVertex3f(1,1,-1); glTexCoord2f(1.0,1.0); glNormal3f(0,0,1);
            glVertex3f(-1,1,-1); glTexCoord2f(0.0,1.0); glNormal3f(0,0,1);

            //Right wall
            glVertex3f(1,1,1); glTexCoord2f(0,0); glNormal3f(-1,0,0);
            glVertex3f(1,-1,1); glTexCoord2f(1,0); glNormal3f(-1,0,0);
            glVertex3f(1,-1,-1); glTexCoord2f(1.0,1.0); glNormal3f(-1,0,0);
            glVertex3f(1,1,-1); glTexCoord2f(0.0,1.0); glNormal3f(-1,0,0);

            //Left wall
            glVertex3f(-1,1,1); glTexCoord2f(0,0); glNormal3f(1,0,0);
            glVertex3f(-1,-1,1); glTexCoord2f(1,0); glNormal3f(1,0,0);
            glVertex3f(-1,-1,-1); glTexCoord2f(1.0,1.0); glNormal3f(1,0,0);
            glVertex3f(-1,1,-1); glTexCoord2f(0.0,1.0); glNormal3f(1,0,0);

            glEnd();
            glDisable(GL_TEXTURE_2D);
            glDeleteTextures( 1, &texture );
        glPopMatrix();
        }
4

1 に答える 1

1

コードを見ずにできることは、大雑把な推測だけです。これが私のものです。

glVertex*最初に頂点を指定し ( )、次にその頂点のテクスチャ座標を指定したと思われます( glTexCoord*)。これは間違った方法です。texcoords は状態の一部になり、その後に描画されるすべての頂点に適用されます。このようなテクスチャでは、実際に 90 度回転していることに気付かないでしょう。

さらに、きのこを先に描いて、次に箱を描いているのではないかと思います。次に、ボックスの最初の頂点は、最後のキノコがたまたま最後の頂点で使用した texcoord を受け取りますが、これはたまたま間違っていました。shrooms がなければ、最後のボックス フェースから最後の texcoord を取得しますが、これはたまたま正しいものでした。

0 番目と 1 番目のレベルのミップマップが使用される場所の間に明確な境界があるため、ミップマッピング アーティファクトをなくすGL_LINEAR_MIPMAP_LINEAR代わりに指定することもできます。GL_LINEAR_MIPMAP_NEAREST

于 2011-12-11T15:14:08.317 に答える