纹理不会随着gluSphere旋转

我在我的显示器中生成了一个gluSphere,它在旋转,但是也有与球体一起旋转的纹理问题。 所以简而言之,无论球体如何旋转,球体周围的纹理都保持在相同的位置。

如何能够随着球体更新纹理,使其旋转?

private static Texture testTex; ... // This method is called in init() public void sphereTexture(GL2 gl) { InputStream iStream = null; try { iStream = getClass().getResourceAsStream("cratepng.png"); TextureData data = TextureIO.newTextureData(iStream, false, null); testTex = TextureIO.newTexture(data); testTex.getImageTexCoords(); testTex.setTexParameteri(GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); testTex.setTexParameteri(GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST); iStream.close(); } catch(IOException e) { e.printStackTrace(); System.exit(1); } // Set material properties gl.glEnable(GL2.GL_TEXTURE_GEN_S); gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT); gl.glTexGeni(GL2.GL_S, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_NORMAL_MAP); gl.glEnable(GL2.GL_TEXTURE_GEN_T); gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT); gl.glTexGeni(GL2.GL_T, GL2.GL_TEXTURE_GEN_MODE, GL2.GL_NORMAL_MAP); gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR); gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR); testTex.setTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S); testTex.setTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T); } // Draw Sphere (FILL, LINE, POINT) method called in display() public void draw(GL2 gl, GLU glu) { gl.glTranslatef(1f, 0.0f, -20.0f); gl.glRotatef(angleSphere, 1f, 0.0f, 0.0f); //90 GLUquadric sphere = glu.gluNewQuadric(); glu.gluQuadricDrawStyle(sphere, GLU.GLU_LINE); glu.gluQuadricTexture(sphere, true); glu.gluQuadricNormals(sphere, GLU.GLU_SMOOTH); glu.gluQuadricOrientation(sphere, GLU.GLU_OUTSIDE); testTex.enable(); // enable texture testTex.bind(); // bind texture glu.gluSphere(sphere, radius, slices, stacks); testTex.disable(); glu.gluDeleteQuadric(sphere); angleSphere += speed; //System.out.println(angleSphere); } 

在发布你的glEnables后,我看到你正在使用glEnable(GL_TEXTURE_GEN_S)和glEnable(GL_TEXTURE_GEN_T)进行球体映射并生成纹理坐标。 你不应该这样做,因为这是由glu完成(见这里 )。

尽管如此,更可疑的是你在glTexGeni函数中使用GL_NORMAL_MAP。 在openGL参考页面中,没有关于如何使用这个参数计算纹理坐标的描述。 您应该删除这两个纹理生成块,或者尝试glTexGeni中的其他参数,即GL_OBJECT_LINEAR。