我正在关注Pro OpenGL ES for Android这本书,并试图让镜面反射正确渲染。这是正在发生的事情:
我使用的是OpenTK的ES11.GL。
这是我的照明代码:
float[] pos = { -14.0F, 7.0F, -50.0F, 1.0F };
float[] white = { 1.0f, 1.0f, 1.0f, 1.0f };
float[] red = { 1.0f, 0.0f, 0.0f, 1.0f };
float[] green = { 0.0f, 1.0f, 0.0f, 1.0f };
float[] blue = { 0.0f, 0.0f, 1.0f, 1.0f };
float[] grey = { 0.2f, 0.2f, 0.2f, 1.0f };
GL.LightModel(All.LightModelAmbient, grey);
GL.Light(Sunlight, All.Position, pos);
GL.Light(Sunlight, All.Diffuse, white);
GL.Light(Sunlight, All.Specular, red);
GL.Light(Sunlight, All.Ambient, blue);
GL.Material(All.FrontAndBack, All.Specular, red);
GL.Material(All.FrontAndBack, All.Diffuse, green);
//GL.Material(All.FrontAndBack, All.Shininess, 5.0F); -- disabled for testing
GL.ShadeModel(All.Smooth);
GL.Enable(All.Lighting);
GL.Enable(Sunlight);
由于我对3D和OpenGL都很陌生,我不知道这个问题是由什么引起的。如果我将光线移动到另一侧,则图像会反转。如果光线直接来自球体前方,则根本没有显示规格。
为什么基本灯会正常工作,但是当包含规格时,它会失败?