Java JOGL在三维立方体上使用二维纹理
我使用以下代码在JOGL中创建了一个3d立方体:Java JOGL在三维立方体上使用二维纹理,java,opengl,jogl,Java,Opengl,Jogl,我使用以下代码在JOGL中创建了一个3d立方体: /** * Function used to draw a cube */ public void drawCube(GL gl) { gl.glBegin(gl.GL_QUADS); //gl.glColor3f(1, 0, 0); gl.glTexCoord3f(0, 0, 0); gl.glVertex3f(0, 0, 0); gl.glTexCoord3f(4, 0
/**
* Function used to draw a cube
*/
public void drawCube(GL gl) {
gl.glBegin(gl.GL_QUADS);
//gl.glColor3f(1, 0, 0);
gl.glTexCoord3f(0, 0, 0);
gl.glVertex3f(0, 0, 0);
gl.glTexCoord3f(4, 0, 0);
gl.glVertex3f(1, 0, 0);
gl.glTexCoord3f(4, 4, 0);
gl.glVertex3f(1, 1, 0);
gl.glTexCoord3f(0, 4, 0);
gl.glVertex3f(0, 1, 0);
gl.glEnd();
gl.glBegin(gl.GL_QUADS);
gl.glTexCoord3f(0, 0, 0);
// gl.glColor3f(0, 1, 0);
gl.glVertex3f(0, 0, 0);
gl.glTexCoord3f(0, 4, 0);
gl.glVertex3f(0, 1, 0);
gl.glTexCoord3f(0, 4, 4);
gl.glVertex3f(0, 1, 1);
gl.glTexCoord3f(0, 0, 4);
gl.glVertex3f(0, 0, 1);
gl.glEnd();
gl.glBegin(gl.GL_QUADS);
// gl.glColor3f(0, 0, 1);
gl.glTexCoord3f(0, 4, 0);
gl.glVertex3f(0, 1, 0);
gl.glTexCoord3f(4, 4, 0);
gl.glVertex3f(1, 1, 0);
gl.glTexCoord3f(4, 4, 4);
gl.glVertex3f(1, 1, 1);
gl.glTexCoord3f(0, 4, 4);
gl.glVertex3f(0, 1, 1);
gl.glEnd();
gl.glBegin(gl.GL_QUADS);
// gl.glColor3f(1, 1, 0);
gl.glTexCoord3f(4, 4, 0);
gl.glVertex3f(1, 1, 0);
gl.glTexCoord3f(4, 0, 0);
gl.glVertex3f(1, 0, 0);
gl.glTexCoord3f(4, 0, 4);
gl.glVertex3f(1, 0, 1);
gl.glTexCoord3f(4, 4, 4);
gl.glVertex3f(1, 1, 1);
gl.glEnd();
gl.glBegin(gl.GL_QUADS);
// gl.glColor3f(1, 0, 1);
gl.glTexCoord3f(4, 0, 0);
gl.glVertex3f(1, 0, 0);
gl.glTexCoord3f(0, 0, 0);
gl.glVertex3f(0, 0, 0);
gl.glTexCoord3f(0, 0, 4);
gl.glVertex3f(0, 0, 1);
gl.glTexCoord3f(4, 0, 4);
gl.glVertex3f(1, 0, 1);
gl.glEnd();
gl.glBegin(gl.GL_QUADS);
// gl.glColor3f(0, 1, 1);
gl.glTexCoord3f(0, 4, 4);
gl.glVertex3f(0, 1, 1);
gl.glTexCoord3f(4, 4, 4);
gl.glVertex3f(1, 1, 1);
gl.glTexCoord3f(4, 0, 4);
gl.glVertex3f(1, 0, 1);
gl.glTexCoord3f(0, 0, 4);
gl.glVertex3f(0, 0, 1);
gl.glEnd();
立方体在屏幕上,现在我尝试在每个面上放置纹理,如下所示:
public void init(GLAutoDrawable gld) {
//Init the gl
GL gl = gld.getGL();
//Init the glu
GLU glu = new GLU();
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(90, 1.6, 0.6, 30.0);
glu.gluLookAt(0, 0, 10, 0, 0, 0, 0, 2, 0);
gl.glEnable(gl.GL_TEXTURE_2D);
int id_textura = Gen_Textura(gl);
gl.glBindTexture(gl.GL_TEXTURE_2D, id_textura);
gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR);
gl.glTexParameteri(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR);
}
问题是纹理只显示在立方体的一个面上,而不是所有6个面上
如何在立方体的所有面上绘制纹理?根据我上面的评论回答
您应该使用
glTexCoord2f
,因为您使用的是二维纹理。此外,纹理坐标通常在[0,1]
范围内,u具有2D纹理,u使用gl.glTexCoord3f(0,4,4);(看起来像3D),其次,对于纹理坐标,我不确定坐标是否高于1。你能再检查一下这两个吗?是的,你应该使用glTexCoord2f
,通常纹理坐标在[0,1]
范围内,你能添加一个答案吗,这样我就可以接受了?如果我使用坐标在[0,1]范围内的glTexCoord2f(),它会起作用。我不知道为什么要否决这个问题。。