1

我无法对 glu Quadric (gluSphere) 进行纹理处理:我得到的不是纹理,而是纹理的平均颜色。

gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_BLEND);
gl.glEnable(GL.GL_TEXTURE_GEN_S); 
gl.glEnable(GL.GL_TEXTURE_GEN_T); 

sunTexture = TextureIO.newTexture(new File("sun.jpg"),false);

float[] rgba = {1f, 1f, 1f};
gl.glMaterialfv(GL.GL_FRONT, GL.GL_AMBIENT, rgba, 0);
gl.glMaterialfv(GL.GL_FRONT, GL.GL_SPECULAR, rgba, 0);
gl.glMaterialf(GL.GL_FRONT, GL.GL_SHININESS, 0.5f);

sunTexture.enable();
sunTexture.bind();
    GLUquadric sun = glu.gluNewQuadric();
    glu.gluQuadricTexture(sun, true);
    glu.gluSphere(sun, 5, DETAIL, DETAIL);
sunTexture.disable();
4

2 回答 2

0

由于 GLU 自己生成纹理坐标并将它们作为 glTexCoord 传输,我认为没有必要启用 texcoord 生成(GL_TEXTURE_GEN_S/T)。我想 GLU 生成的 texCoords 会被 texgen 的那些覆盖。

我还看到,您向 glMaterial 提交了一个包含三个浮点数的数组,它需要 RGBA(4 个浮点数)。但由于我使用 C++,我可能错了,这适用于 JoGL。

于 2011-05-07T16:57:35.850 回答
0

我发现了问题:我设置了 gl.glFrustum(-20, 20, -20, 20, 0.1, 400);

设置后 gl.glFrustum(-20, 20, -20, 20, 1, 400);

看起来没问题。

于 2011-05-09T12:57:00.960 回答