使用OpenGL法线进行矩阵转换

我正在使用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();
一切都很好。 以下是一些截图(分别与其代码相对应)     
已邀请:
我怀疑你的法线很好,但你没有正确更新你的光线位置和/或方向。查看OpenGL FAQ第18章,特别是18.050。     

要回复问题请先登录注册