OpenGLを使用して Java で 3D ゲーム エンジンを作成しています。また、slickライブラリを使用してテクスチャを実装しています。長方形/正方形のプリズム (6 つの正方形/長方形) を作成する方法を使用しています。同じ方法で、テクスチャを実装します。
問題は、プリズムの 5 つの側面が 90 度回転したテクスチャでレンダリングされることです。メインフロアの場合は問題ありませんが、レンガの壁のテクスチャで使用しているため、見た目が正しくありません.
これは壁なので、私はその 4 つの側面だけを気にします。
壁のテクスチャは、プリズムの 3 つの側面で 90 度回転してレンダリングされています。片面のみ回転せずにレンダリングされます。
問題を解決できませんでした。テクスチャの実装方法を変更する必要がありますか?
プリズムの作り方はこちら。
public static void quadPrizm(float x, float y, float z, float sx, float sy, float sz, Texture tex){
glPushMatrix();
{
glTranslatef(x, y, z);
tex.bind();
glBegin(GL_QUADS);
{
//ROTATED (WRONG)
glTexCoord2f(0, 0); glVertex3f(-sx/2, -sy/2, sz/2);
glTexCoord2f(0, 4); glVertex3f(sx/2, -sy/2, sz/2);
glTexCoord2f(4, 4); glVertex3f(sx/2, sy/2, sz/2);
glTexCoord2f(4, 0); glVertex3f(-sx/2, sy/2, sz/2);
//THE CORRECT SIDE
glTexCoord2f(0, 0); glVertex3f(-sx/2, -sy/2, -sz/2);
glTexCoord2f(0, 4); glVertex3f(-sx/2, sy/2, -sz/2);
glTexCoord2f(4, 4); glVertex3f(sx/2, sy/2, -sz/2);
glTexCoord2f(4, 0); glVertex3f(sx/2, -sy/2, -sz/2);
//ROTATED (WRONG)
glTexCoord2f(0, 0); glVertex3f(-sx/2, -sy/2, -sz/2);
glTexCoord2f(0, 4); glVertex3f(-sx/2, -sy/2, sz/2);
glTexCoord2f(4, 4); glVertex3f(-sx/2, sy/2, sz/2);
glTexCoord2f(4, 0); glVertex3f(-sx/2, sy/2, -sz/2);
//ROTATED (WRONG)
glTexCoord2f(0, 0); glVertex3f(sx/2, -sy/2, -sz/2);
glTexCoord2f(0, 4); glVertex3f(sx/2, -sy/2, sz/2);
glTexCoord2f(4, 4); glVertex3f(sx/2, sy/2, sz/2);
glTexCoord2f(4, 0); glVertex3f(sx/2, sy/2, -sz/2);
//BOTTOM SIDE
glTexCoord2f(0, 0); glVertex3f(-sx/2, -sy/2, -sz/2);
glTexCoord2f(0, 4); glVertex3f(sx/2, -sy/2, -sz/2);
glTexCoord2f(4, 4); glVertex3f(sx/2, -sy/2, sz/2);
glTexCoord2f(4, 0); glVertex3f(-sx/2, -sy/2, sz/2);
//TOP SIDE
glTexCoord2f(0, 0); glVertex3f(-sx/2, sy/2, -sz/2);
glTexCoord2f(0, 4); glVertex3f(sx/2, sy/2, -sz/2);
glTexCoord2f(4, 4); glVertex3f(sx/2, sy/2, sz/2);
glTexCoord2f(4, 0); glVertex3f(-sx/2, sy/2, sz/2);
}
glEnd();
}
glPopMatrix();
}
次の行で、壁のテクスチャを持つ立方体を作成します。
Draw.cube(0, 10, 10, 5, 5, 5, wall);
回転した 3 つの側面のうちの 1 つを次に示します。
ここに正しい唯一の側面があります: