2013-08-17 2 views
0

나는이 문제를 해결하기 위해 수일 간의 실험과 검색을 침몰 시켰고, 나는 너무 두꺼워서 내가 말한 것을 이해하지 못하거나 정확한 용어를 찾지 못했다.행렬 회전 효과 광원

개체를 3D 공간으로 렌더링하고 "카메라"를 구현하는 시스템을 설정했습니다. 나는 이제 광원을 추가하려고 노력 중이며 상당히 실망한 문제에 직면 해있다.

"카메라"는 실제로 특정 항목이 렌더링되기 전에 적용되는 mvMatrix의 회전 및 평행 이동입니다.

자신의 축에서 회전하는 객체에 논리를 추가하면 조명이 올바르게 유지되고 광원에 마주 보는 객체의 다양한면에 불이 들어옵니다. 그러나 카메라를 움직이면 광원이 카메라에 상대적으로 달라 붙어서 원하는 것이 아닙니다. 해결

일부 시도이되었습니다

  • 위치 카메라를 이동 및 회전하기 전에 빛,
  • 위치 카메라를 이동 및 회전 후 빛,
  • 위치 이동 한 후 빛과 카메라를 회전하기 전에
  • 모든 것이 렌더링 된 후 mvMatrix가 팝업 된 후에 조명을 배치하십시오.
  • 모든 것이 렌더링 된 후에 조명을 배치하고 b
  • 빛의 위치를 ​​프로그램의 시작 부분에 한 번 두십시오. 렌더링 루프 중에 다시 표시하지 마십시오.
  • 빛을 배치 할 때 위치 vec3에 mvMatrix를 곱합니다. 빛을 0,0,0에 항상 배치하는 것 같습니다.
  • 빛을 배치 할 때 위치 vec3에 mvMatrix의 역 (매우 기괴한 결과)을 곱합니다.

이것은 mvMatrix 회전으로 회전해야한다고 생각하지만 번역은 무시합니다 (왜 나는 시도하지 않았다고 생각할 수있는 유일한 이유라고 생각하지 않습니다). 그러나 나는 그것을하기 쉬운 방법을 찾을 수 없었기 때문에 잘못 될 수 있습니다. (! 하,의 PR 환영)

어쨌든, 난 여기, 내가 공공 github의의의 repo에 모든이 코드를보고 싶어 확신 당신이 관심이있을거야 기대 비트입니다 :

난 그냥 가벼운 물체를하기 전에, 먼저 이해하려면, prepareLighting 아주에서 해킹되는 것을 알고 있어요.당신이 행동을보고 싶다면

그리고, 이쪽을 봐 : 정말 아주 붙어 나처럼 http://www.bracketbrotherhood.com/webgl-engine

나는이 몇 가지 도움을 주셔서 감사합니다 정말 것이다.

제쳐두고, 이것은 처음으로 청초한 JS에서의 첫 번째 시도입니다. 코드 기반을 더 잘 구성 할 수있는 방법에 대한 의견이 있으면 그 내용을 듣고 싶습니다. 물론 강조해야하지만 분명합니다. 내 조명 문제를 해결하는 것보다 나에게 더 낮은 관심사, 지금 당장!

죄송 텍스트의 벽 ... 정말 고마워요! 나는에서 조명 코드를 복사 한

+0

나는 또한 이것을 OpenGL 문제로봤을 뿐이지 만, 대부분의 솔루션은 glglight를 사용하여 webgl에서 관련된 호출을 찾을 수 없다는 점에 유의해야합니다. – Philthi

+0

나는 내 객체를 0, -5, 0으로 옮기고 mvMatrix에 의한 곱셈을 다시 적용했다. 빛이 0,0,0 일 때 완벽하게 작동한다. 어떤 축을 따라 양의 빛을 움직일 때 그것은 약간 움직입니다 (즉 축에 1로 움직이는 것처럼, 즉 밝은 위치 : [0,5,0]이 그것을 [0,1,0]으로 설정하는 것처럼 보입니다). 그러나 음의 축 값 무시당하는 것처럼 보입니다! – Philthi

답변

0

필 :이 무엇을하고 있는지 100 % 확신을 모르겠지만, 여기에 조명 코드는 AA 호출 vec3.normalize 할 수있다 http://learningwebgl.com/lessons/lesson07/index.html

(나는 생각한다

var alp = vec3.create(); 
vec3.normalize([17,0,0], alp); 

: 여기가 전에 내를하고 후에는 명확성을 위해 문제 :

를 해결 제거) ... 정상으로 돌려됩니다 변경 대상 :

var alp = vec3.create([17,0,0]); 

문제가 해결되었습니다. 만 세!

+0

업데이트를 원한다면 http : //www.bracketbrotherhood/com/webgl-engine/을 업데이트했습니다. :) – Philthi