2011-04-07 34 views
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(); 

一切呈現罰款。

這裏有一些截圖(各自對自己的代碼)

Shading not working Shading working

+2

我不確定你想要做什麼......法官們不打算翻譯。法線是方向,他們沒有立場的概念。這就是爲什麼他們的_w_組件是零。 – Damon 2011-04-07 20:16:52

+0

如果我將偏移量設置爲{0,0,0},則對象呈現正常,但如果我完全改變偏移量,則會將法線擰緊。難道我做錯了什麼? – 2011-04-07 20:19:01

+1

不是。在新的「工作」代碼中,進入法線的值不是正確的法線,因爲您使用點代替點。它們不是長度爲1(你使用的是GL_NORMALIZE?),並且在z方向有嚴重的偏差。 – 2011-04-08 18:16:50

回答

0

我懷疑你的法線都很好,但你不能夠正確地更新光源的位置和/或方向。查看OpenGL FAQ Chapter 18,特別是18.050。

+1

好吧,我添加了一個更新。讓我知道這是否能揭示這件事(笑) – 2011-04-07 20:48:46