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