Java OpenGL&x2B;光滑加载的纹理正在旋转
我正在使用OpenGL在Java中创建3D游戏引擎。我正在使用slick库来实现纹理。 我正在使用一种方法来创建矩形/方形棱镜(6个正方形/矩形)。在相同的方法中,我实现了纹理 问题是棱柱体的5个面使用90度旋转纹理进行渲染。当维护地板时,这并不重要,但因为我在砖墙纹理上使用它,所以看起来不太合适 因为这是一堵墙,所以我只关心它的四面 墙纹理将在棱镜的3个面上旋转90度。并且仅在一侧渲染而不旋转 我解不出这个问题。我是否需要更改纹理的实现方式 下面是创建棱镜的方法Java OpenGL&x2B;光滑加载的纹理正在旋转,java,opengl,textures,slick,Java,Opengl,Textures,Slick,我正在使用OpenGL在Java中创建3D游戏引擎。我正在使用slick库来实现纹理。 我正在使用一种方法来创建矩形/方形棱镜(6个正方形/矩形)。在相同的方法中,我实现了纹理 问题是棱柱体的5个面使用90度旋转纹理进行渲染。当维护地板时,这并不重要,但因为我在砖墙纹理上使用它,所以看起来不太合适 因为这是一堵墙,所以我只关心它的四面 墙纹理将在棱镜的3个面上旋转90度。并且仅在一侧渲染而不旋转 我解不出这个问题。我是否需要更改纹理的实现方式 下面是创建棱镜的方法 public static v
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);
这是三个旋转边之一的:
这是唯一正确的一面:
我通过更改纹理坐标解决了这个问题。新代码如下所示:
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(4, 0); glVertex3f(-sx/2, -sy/2, sz/2);
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);
//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(4, 0); glVertex3f(-sx/2, -sy/2, -sz/2);
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);
//ROTATED (WRONG)
glTexCoord2f(4, 0); glVertex3f(sx/2, -sy/2, -sz/2);
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);
//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();
}