2014-07-13 5 views
1

기본 큐브 맵 구현을 테스트 중이며 하나의 마지막 세부 사항을 제외하고는 잘 작동합니다. 카메라를 움직이면 큐브 맵이 위/아래 축에서 뒤집습니다. 내가 카메라를 이동하면 뒤집기가 발생했을 때움직이는 카메라로 뒤집는 OpenGL 큐브 맵 반사

, 내보기 행렬을주의 사항 :

enter image description here

------ 
-0.01, 0.13, -0.99, 0.00 
0.00, 0.99, 0.13, 0.00 
1.00, 0.00, -0.01, 0.00 
-1.95, -0.28, -6.31, 1.00 
------ 

다음 사진을 제공합니다 :

------ 
0.01, 0.13, -0.99, 0.00 
0.00, 0.99, 0.13, 0.00 
1.00, -0.00, 0.01, 0.00 
-1.86, -0.28, -6.34, 1.00 
------ 

는 다음 그림을 제공합니다 : enter image description here

열 1 및 3의 기호가 0.01로 바뀌므로주의하십시오. GLSL에서 정상적인 계산을 위해

나는 다음을 수행하십시오

버텍스 쉐이더 :

mat4 model_view = view * m; 
position_eye = vec3(model_view * vec4(vertex_position, 1.0)); 
mat3 normal_matrix = mat3(transpose(inverse(model_view))); 
normal_eye = normalize(normal_matrix * vertex_normal); 

조각 쉐이더 :

vec3 func_cubemap_reflect() 
{ 
    vec3 incident_eye = normalize(position_eye); 
    vec3 normal = normalize(normal_eye); 
    vec3 reflected = reflect(incident_eye, normal); 

    // convert from eye to world space 
    reflected = vec3(inverse(view) * vec4(reflected, 0.0)); 
    return texture (cube_texture, reflected).rgb; 
    } 

어떤 생각이 디버깅하는 방법 또는 리플렉션이 항상 "올바른 방법"이되도록 문제를 해결 하시겠습니까?

답변

1

아마도 계산의 어딘가에서 정밀도를 잃어 버렸을 것입니다. 아마도 역전렬 일 수 있습니다.

일부 옵션 : 쉐이더에서 highp 설정

  • 시도?
  • GLSL 버전에서 지원하는 경우/model_view 개의 행렬을 dmat4 (정확도 향상을 위해)으로 정의 해 볼 수 있습니다.
+0

나는 성공하지 못한 채로 highp를 시도했다. 그러나, 나는 reflect = vec3 (inverse (view + mat4 (1.0) * 0.01) * vec4 (reflection, 0.0));을 수행하는 접근법을 테스트하고있다. 그것이 반전에 댐핑 팩터를 추가하여 안정화시키는 것입니다. 결과는 예상대로 나타납니다. 이 해킹이 얼마나 나쁜지 잘 모르겠습니까? 이견있는 사람? – toeplitz