Android OpenGL ES中的着色问题

Android OpenGL ES中的着色问题,android,opengl-es,Android,Opengl Es,我设置了漫反射照明: private float[] lightAmbient = { 0.5f, 0.5f, 0.5f, 1.0f }; private float[] lightDiffuse = { 1.0f, 1.0f, 1.0f, 1.0f }; private float[] lightPosition = { 0.0f, 0.0f, 2.0f, 1.0f }; gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbientBu

我设置了漫反射照明:

private float[] lightAmbient = { 0.5f, 0.5f, 0.5f, 1.0f };
private float[] lightDiffuse = { 1.0f, 1.0f, 1.0f, 1.0f };
private float[] lightPosition = { 0.0f, 0.0f, 2.0f, 1.0f };

gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbientBuffer);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuseBuffer);

gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPositionBuffer);
gl.glEnable(GL10.GL_LIGHT0);

gl.glShadeModel(GL10.GL_SMOOTH);
但我在位于原点(中心)的立方体上得到三角形着色或平面颜色,并围绕x和y旋转45度。所以立方体就在光的正前方。为什么我的成绩这么差?附件是立方体图像


OpenGL ES计算每个三角形顶点的颜色。然后在三角形上插值颜色,理想情况下,顶点应计算两个三角形之间的相同颜色,但各种情况可能会导致不计算

虽然立方体的边是用两个三角形建模的,但看起来是这样。您可以将立方体边分解为更多的三角形,但这会增加更多内存存储,并可能降低绘图速度


您还可以移动到OpenGL ES 2.0并编写着色器,该着色器可以在整个曲面上正确插值颜色,但这需要重写整个管道。OGL ES不允许您混合使用旧式和基于着色器的实现。

您使用哪个平台?Android?对不起,我忘了提一下,我正在使用Android和Android emulator的图像。另一种可能是,三角形的每个顶点的法线都不正确。当法线计算不正确时,我得到了类似的结果。