5

次のコードで頂点配列にテクスチャを適用しようとしています:

glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texcoords);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_QUADS, 12, GL_UNSIGNED_BYTE, faceIndices);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);

glDisable(GL_TEXTURE_2D);

このテクスチャで: テクスチャー

だから私はこの結果を持っています: 結果

今、床のテクスチャをどのようにスケーリングできるか疑問に思っています.Photoshopでテクスチャをスケーリングしようとしましたが、結果は同じですが、より重いです.

4

2 に答える 2

6

テクスチャのタイルを少なくするか、タイルを多くする必要があると思います。その場合は、テクスチャではなく、テクスチャの座標を変更してください(つまり、データが何であれtexcoords)。

また、サンプルテクスチャは青ですが、レンダリングされた画像では茶色です。ロード時にR+Bチャンネルを交換している可能性があります。

于 2013-01-24T09:41:16.893 に答える
2

テクスチャをどのようにマッピングするかは、テクスチャ座標によって異なります。例を見てみましょう、それはポリゴン全体をカバーしています

glTexCoord2f(0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f);

テクスチャを 5 回繰り返したい場合は、` のような座標を指定します

glTexCoord2f(0.0f, 0.0f);
glTexCoord2f(5.0f, 0.0f);
glTexCoord2f(5.0f, 5.0f);
glTexCoord2f(0.0f, 5.0f);`

上記の例のように、テクスチャをマップする方法の値を変更します。

于 2013-01-24T09:52:37.317 に答える