現在、スカイボックスを次のようにレンダリングしています。
//Front Face
GL11.glBindTexture(GL11.GL_TEXTURE_2D, skybox[0].getTextureID());
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(1f, 0.0f);
GL11.glVertex3f(-player.x - offset, -player.y - offset, -player.z - offset);
GL11.glTexCoord2f(1f, 1f);
GL11.glVertex3f(-player.x - offset, -player.y + offset, -player.z - offset);
GL11.glTexCoord2f(0.0f, 1f);
GL11.glVertex3f(-player.x + offset, -player.y + offset, -player.z - offset);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(-player.x + offset, -player.y - offset, -player.z - offset);
GL11.glEnd();
// Back Face
GL11.glBindTexture(GL11.GL_TEXTURE_2D, skybox[2].getTextureID());
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(-player.x - offset, -player.y - offset, -player.z + offset);
GL11.glTexCoord2f(1f, 0.0f);
GL11.glVertex3f(-player.x + offset, -player.y - offset, -player.z + offset);
GL11.glTexCoord2f(1f, 1f);
GL11.glVertex3f(-player.x + offset, -player.y + offset, -player.z + offset);
GL11.glTexCoord2f(0.0f, 1f);
GL11.glVertex3f(-player.x - offset, -player.y + offset, -player.z + offset);
GL11.glEnd();
// Top Face
GL11.glBindTexture(GL11.GL_TEXTURE_2D, skybox[4].getTextureID());
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(1f, 1f);
GL11.glVertex3f(-player.x - offset, -player.y - offset, -player.z - offset);
GL11.glTexCoord2f(0.0f, 1f);
GL11.glVertex3f(-player.x + offset, -player.y - offset, -player.z - offset);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(-player.x + offset, -player.y - offset, -player.z + offset);
GL11.glTexCoord2f(1f, 0.0f);
GL11.glVertex3f(-player.x - offset, -player.y - offset, -player.z + offset);
GL11.glEnd();
// Bottom Face
GL11.glBindTexture(GL11.GL_TEXTURE_2D, skybox[5].getTextureID());
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(1f, 0f);
GL11.glVertex3f(-player.x - offset, -player.y + offset, -player.z - offset);
GL11.glTexCoord2f(1f, 1f);
GL11.glVertex3f(-player.x - offset, -player.y + offset, -player.z + offset);
GL11.glTexCoord2f(0f, 1f);
GL11.glVertex3f(-player.x + offset, -player.y + offset, -player.z + offset);
GL11.glTexCoord2f(0f, 0f);
GL11.glVertex3f(-player.x + offset, -player.y + offset, -player.z - offset);
GL11.glEnd();
// Right face
GL11.glBindTexture(GL11.GL_TEXTURE_2D, skybox[3].getTextureID());
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(-player.x - offset, -player.y - offset, -player.z - offset);
GL11.glTexCoord2f(1f, 0.0f);
GL11.glVertex3f(-player.x - offset, -player.y - offset, -player.z + offset);
GL11.glTexCoord2f(1f, 1f);
GL11.glVertex3f(-player.x - offset, -player.y + offset, -player.z + offset);
GL11.glTexCoord2f(0.0f, 1f);
GL11.glVertex3f(-player.x - offset, -player.y + offset, -player.z - offset);
GL11.glEnd();
// Left Face
GL11.glBindTexture(GL11.GL_TEXTURE_2D, skybox[1].getTextureID());
GL11.glBegin(GL11.GL_QUADS);
GL11.glTexCoord2f(1f, 0.0f);
GL11.glVertex3f(-player.x + offset, -player.y - offset, -player.z - offset);
GL11.glTexCoord2f(1f, 1f);
GL11.glVertex3f(-player.x + offset, -player.y + offset, -player.z - offset);
GL11.glTexCoord2f(0.0f, 1f);
GL11.glVertex3f(-player.x + offset, -player.y + offset, -player.z + offset);
GL11.glTexCoord2f(0.0f, 0.0f);
GL11.glVertex3f(-player.x + offset, -player.y - offset, -player.z + offset);
GL11.glEnd();
これは、テクスチャとクワッドを切り替え続けなければならないため、スカイボックスをレンダリングする非常に非効率的な方法のように思えます。さらに、このようなクワッドのレンダリングは、単一のピクセル ライン (クワッド間の継ぎ目) などの視覚的なアーティファクトに起因する傾向があります。これをより効率的にするためにキューブ マップを利用することを聞いたことがありますが、実装に苦労しています。何か提案があれば、遠慮なく私を正しい方向に向けてください。ありがとう。