Световой зеркальный рендеринг OpenGL ES только на половине объекта

Я слежу за книгой Pro OpenGL ES для 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, я понятия не имею, чем вызвана эта проблема. Если я переместу свет на другую сторону, изображение перевернется. Если источник света находится прямо перед сферой, то никакие спецификации не отображаются вообще.

Почему основной свет работает правильно, но при включении спецификации он не работает?

0 ответов

Другие вопросы по тегам