我正在使用 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();
一切都很好。
这是一些屏幕截图(根据他们的代码)