2014-07-22 5 views
0

http://antongerdelan.net/opengl/cubemaps.html의 GLSL 코드를 사용하여 FxPlug에서 큐브 매핑을 구현하려고합니다. 코드에 대한 유일한 주요 수정 사항은 변수 이름 변경과 gl_Vertex 및 gl_Normal 속성 대신 사용이었습니다.FxPlug는 거리에서 큐브 맵을 반전합니다.

정점 프로그램 조각 :

varying vec3 pos_eye; 
varying vec3 n_eye; 

pos_eye = vec3(ViewMatrix * ModelMatrix * gl_Vertex); 
n_eye = vec3(ViewMatrix * ModelMatrix * vec4(gl_Normal, 0.0)); 
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * gl_Vertex; 

조각 프로그램 조각가 :

vec3 incident_eye = normalize(pos_eye); 
vec3 norm = normalize(n_eye); 
vec3 reflected = reflect(incident_eye, norm); 
reflected = vec3(InverseViewMatrix * vec4(reflected, 0.0)); 
vec3 cubemapColor = textureCube(cubemap, reflected).rgb; 

그때 카메라를 삽입 모델에로드, 큐브 맵은 실제로 거꾸로 밖으로 시작하지만 카메라를 특정 거리에서 멀리 이동 시키면 적절한 결과를 얻습니다. 큐브 맵을 구현할 때이 문제를 본 사람이 있습니까? 나는 이것이 모션 및/또는 FxPlug에서 카메라를 다루는 방법과 관련된 문제라고 생각하고 있습니다.

행동 문제의 비디오는 비디오에서 http://youtu.be/Yj85y-VKjCY

에서 찾을 수 있습니다, 나는 기본 영역을로드를 확장하고 스카이 박스를 할 수 있습니다. 구의 큐브 맵이 거꾸로 시작됩니다. 구체를 회전 시키면 큐브 맵이 이동하지 않습니다 (카메라가 움직일 때 비디오 전체에 걸쳐 검은 질감의 인공물을 무시합니다. 메모리가 부족할 때 발생하는 것처럼 보입니다). 구형을 확대 한 후에는 좀 더 사실적인 "반사"왜곡이 발생하지만 큐브 맵은 여전히 ​​거꾸로되어 있습니다. 큐브 맵이 어떻게 보이게되는지를 알맞은 거리로 축소하기 시작할 때가 아닙니다. 내가 알아 챘던 것은 큐브 맵이 구를 둘러싸고있는 흰색 직사각형이 완전히 보일 때 올바르게 보인다는 것입니다.

이 문제를 해결하는 방법에 대한 조언을 주시면 감사하겠습니다. 미리 감사드립니다!

답변

0

추가 조사가 끝나면 큐브 맵 왜곡이 잘못 계산 된 반사 방향에서 발생한다는 것을 알았습니다. 카메라의 "실제"위치는 양의 Z 방향으로 약 2000 단위입니다. 이 차이를 설명하기 위해 버텍스 쉐이더에서 원본과 비슷한 별도의 뷰 매트릭스를 만들었지 만 별도의 뷰 매트릭스의 15 번째 항목 (즉 "위치"열의 Z 요소)에서 2000을 뺍니다. I는 여전히 gl_Position 기억 다양한 시각 공간 위치를 계산하기 위해 조정도 행렬을 이용하여 원래 뷰 매트릭스를 사용하더라도

mat4 AdjustedViewMatrix = ViewMatrix; 
AdjustedViewMatrix[3][2] += -2000.0; 

pos_eye = vec3(AdjustedViewMatrix * ModelMatrix * gl_Vertex); 

큐브 맵 왜곡을 방지 할 때 오브젝트에 가까운.