我正在关注适用于 Android 的 Pro OpenGL ES 一书,并试图让镜面反射正确渲染。这是正在发生的事情:
我正在使用 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 都很陌生,所以我不知道这个问题是由什么引起的。如果我将光移到另一侧,图像就会反转。如果光线直接来自球体前面,则根本不会显示任何规格。
为什么基本灯可以正常工作,但在包含规范时,它会失败?