2010-03-07 2 views
2

OpenGL에서 그림자 매핑을보고 있습니다. 내가 바이어스 행렬을 찢어 경우, 지금그림자 매핑의 바이어스 매트릭스

// This is matrix transform every coordinate x,y,z 
// x = x* 0.5 + 0.5 
// y = y* 0.5 + 0.5 
// z = z* 0.5 + 0.5 
// Moving from unit cube [-1,1] to [0,1] 
const GLdouble bias[16] = { 
    0.5, 0.0, 0.0, 0.0, 
    0.0, 0.5, 0.0, 0.0, 
    0.0, 0.0, 0.5, 0.0, 
    0.5, 0.5, 0.5, 1.0}; 

// Grab modelview and transformation matrices 
glGetDoublev(GL_MODELVIEW_MATRIX, modelView); 
glGetDoublev(GL_PROJECTION_MATRIX, projection); 


glMatrixMode(GL_TEXTURE); 
glActiveTextureARB(GL_TEXTURE7); 

glLoadIdentity(); 
glLoadMatrixd(bias); 

// concatating all matrice into one. 
glMultMatrixd (projection); 
glMultMatrixd (modelView); 

// Go back to normal matrix mode 
glMatrixMode(GL_MODELVIEW); 

:

나는 같은 코드를 참조하십시오. 코드가 작동하지 않습니다. 다른 쉐도우 맵핑 코드를 검색 할 때, 나는 설명없이 똑같은 바이어스 매트릭스를 본다. x, y, z를 0.5 * x + 0.5, 0.5 * y + y로 매핑하는 이유는 무엇입니까?

감사합니다.

답변

5

표준 모델 뷰/프로젝션 행렬을 사용하여 절두체 내부의 정점을 변환하면 결과는 [-1 : 1] x [-1 : 1]에있는 정점입니다 ] x [-1 : 1] 큐브. [0 : 1] x [0 : 1] 범위에 텍스처 좌표가 있어야하므로 x와 y에 대한 재 매핑이 필요합니다. DepthRange이 기본값 인 [0 : 1]이라고 가정 할 때 Z와 같은 종류입니다.