2011-04-07 10 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_ 구성 요소가 0 인 이유입니다. – Damon

+0

오프셋을 {0,0,0}으로 설정하면 객체가 잘 렌더링되지만, 오프셋을 전혀 변경하지 않으면 법선을 나사로 고정합니다. 내가 뭔가 잘못하고 있는거야? –

+1

아닙니다. 새로운 "작업중 인"코드에서, 법선으로가는 값은 올바른 법선이 아닙니다. 포인트 대신에 pt를 사용하고 있습니다. 그들은 길이가 1이 아니며 (GL_NORMALIZE를 사용하고 있습니까?) z 방향으로 심하게 편향되어 있습니다. –

답변

0

나는 당신의 법선이 괜찮 의심,하지만 당신은 제대로 빛의 위치 및/또는 방향을 업데이트하지 않습니다. 특별히 OpenGL FAQ Chapter 18, 18.050을 확인하십시오.

+1

좋아, 나는 업데이 트를 추가했습니다. 그 문제에 대해 약간의 빛을 비추면 알려주세요 (웃음). –