2012-03-31 3 views
0

내가 LWJGL/OpenGL을 상당히 새로운 그리고 난 내가하려고 무엇이든 고칠 수있는이 문제에 건너했습니다이상한 조명 동작은

내가 여러 큐브를 그릴 때 큐브가 '카메라'에서 얼마나 멀리 떨어져 있든 관계없이 화면에 도달하면 빛이 똑같은 밝기입니다. 즉, 많은 양의 큐브를 화면에 그릴 때 서로 같은 양의 빛을 얻고 이상하게 보입니다.

Here's a GIF demonstrating what I mean.

내 소스 코드 : http://pastebin.com/qd5dsZ89

가 어떻게 그들 모두에서 빛을 혼합 갑자기 중단하지 않도록 그것을 해결할 수 있습니까?

+2

[팁] (http://sscce.org/) : 코드베이스의 크기를 문제의 작은 샘플로 줄이십시오. 거기에서 그걸 가지고 놀아서 (이상적으로) 솔루션을 해결하거나 오류가 어디서 왔는지 관찰하십시오. 다른 사람들에게 당신의 전체 코드를 읽으라고 요청하는 것은 다소 어렵습니다. – Makoto

+0

달성하고자하는 조명의 종류는 무엇입니까? 고정 위치 조명 (일광) 또는 카메라 (손전등)로 이동? 거리에서 멀어지기를 원하십니까? – Tim

+0

나는 거리에서 떨어지는 고정 된 빛을 목표로하고있다. 시위를 위해 카메라와 함께 움직 이도록 설정했습니다. – user1248420

답변

5

코드의 중요한 비트 :

나는 바깥쪽으로 가리키는 큐브 법선 벡터의 8 개 코너를 제공하는, 제대로 읽는다면
  // Render a wall 
      glTexCoord2f(0, 0); 
      glNormal3f(wall.a.x > 0 ? 1 : -1, wall.a.y > 0 ? 1 : -1, wall.a.z > 0 ? 1 : -1); 
      glVertex3f(wall.a.x, wall.a.y, wall.a.z); 
      glTexCoord2f(xS, 0); 
      glNormal3f(wall.b.x > 0 ? 1 : -1, wall.b.y > 0 ? 1 : -1, wall.b.z > 0 ? 1 : -1); 
      glVertex3f(wall.b.x, wall.b.y, wall.b.z); 
      glTexCoord2f(xS, yS); 
      glNormal3f(wall.c.x > 0 ? 1 : -1, wall.c.y > 0 ? 1 : -1, wall.c.z > 0 ? 1 : -1); 
      glVertex3f(wall.c.x, wall.c.y, wall.c.z); 
      glTexCoord2f(0, yS); 
      glNormal3f(wall.d.x > 0 ? 1 : -1, wall.d.y > 0 ? 1 : -1, wall.d.z > 0 ? 1 : -1); 
      glVertex3f(wall.d.x, wall.d.y, wall.d.z); 

. 동일한 구석에있는 (다른면의) 모든 꼭지점은 동일한 법선을가집니다. 따라서 '둥근'큐브를 만들면 단일 큐브에 가장자리가 표시되지 않습니다.

큐브의 한면을 구성하는 모든 정점에 동일한 법선을 부여합니다. 예를 들어, 가장 위에있는 벽의 경우 모든면에 일반 (1,0,0)을 사용합니다.

해결 방법 : 각 법선에 대해 올바른 법선 벡터를 사용하여 glNormal3f 번씩 호출하십시오.