0
我在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();
当我给几何偏移量,它不能正常显示(如法线不正确映射
任何帮助将优秀
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();
一切呈现罚款。
这里有一些截图(各自对自己的代码)
我不确定你想要做什么......法官们不打算翻译。法线是方向,他们没有立场的概念。这就是为什么他们的_w_组件是零。 – Damon 2011-04-07 20:16:52
如果我将偏移量设置为{0,0,0},则对象呈现正常,但如果我完全改变偏移量,则会将法线拧紧。难道我做错了什么? – 2011-04-07 20:19:01
不是。在新的“工作”代码中,进入法线的值不是正确的法线,因为您使用点代替点。它们不是长度为1(你使用的是GL_NORMALIZE?),并且在z方向有严重的偏差。 – 2011-04-08 18:16:50