我正在使用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();
当我为几何体赋予偏移量时,它不能正确渲染(例如,法线不能正确映射。
任何帮助都会很棒。
p.s。,我正在使用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();
一切都很好。
以下是一些截图(与其代码相对应)