Я работаю с геометрией в OpenGL, и сейчас я работаю с освещением.Я замечаю, что если я перевожу свою геометрию, нормали не следуют и, следовательно, бесполезны.
Как применить матрицу преобразования к геометрии и поддерживать нормали?
В настоящее время яЯ использую следующий код:
GL.PushMatrix();
if (Offset != null)
{
GL.Translate(Offset.X, Offset.Y, Offset.Z);
}
GL.Begin(BeginMode.Triangles);
foreach (var face in Faces)
{
foreach (var i in face)
{
var point = Points[i - 1];
GL.Normal3(point);
GL.Vertex3(point);
}
}
GL.End();
GL.PopMatrix();
Когда я даю смещение геометрии, она не отображается должным образом (например, нормали не отображаются правильно.
Любая помощь будетотлично.
ps, я использую оболочку OpenTK, но обычный OpenGL транслируется напрямую через.
РЕДАКТИРОВАТЬ:
Хорошо, если я изменю код выше на следующий:
GL.PushMatrix();
//if (Offset != null)
//{
// GL.Translate(Offset.X, Offset.Y, Offset.Z);
//}
GL.Begin(BeginMode.Triangles);
foreach (var face in Faces)
{
foreach (var i in face)
{
var point = Points[i - 1];
if (Offset == null)
{
GL.Normal3(point);
GL.Vertex3(point);
}
else
{
var pt = new Vector3d(Offset.X + point.X, Offset.Y + point.Y, Offset.Z + point.Z);
GL.Normal3(pt);
GL.Vertex3(pt);
}
}
}
GL.End();
GL.PopMatrix();
все отрисовывается нормально.
Вот несколько скриншотов (соответствующих их коду)