OpenGL ES光镜面渲染仅对象的一半

时间:2012-07-09 10:22:45

标签: android opengl-es xamarin.android opentk opengl-es-lighting

我正在关注Pro OpenGL ES for Android这本书,并试图让镜面反射正确渲染。这是正在发生的事情:

strange specular

我使用的是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都很陌生,我不知道这个问题是由什么引起的。如果我将光线移动到另一侧,则图像会反转。如果光线直接来自球体前方,则根本没有显示规格。

为什么基本灯会正常工作,但是当包含规格时,它会失败?

0 个答案:

没有答案