2014-01-23 3 views
0

지향성 투영을위한 작업용 섀도우 맵 구현이 있습니다. 여기에서 직교 투영을 사용하여 투영 행렬을 구성합니다. 내 질문은 어떻게 그림자 맵을 시각화합니까? 나는 스포트라이트 (투시 투영법을 사용함)에 사용하는 다음 셰이더를 가지고 있지만, 정사영 투영으로 만들어진 섀도우 맵에 적용하려고하면 완전히 검정색 화면이됩니다 (그림자 맵핑이 작동하더라도 장면 자체)스크린에 정사영 그림자 맵 렌더링?

#version 430 

layout(std140) uniform; 

uniform UnifDepth 
{ 
    mat4 mWVPMatrix; 
    vec2 mScreenSize; 
    float mZNear; 
    float mZFar; 
} UnifDepthPass; 

layout (binding = 5) uniform sampler2D unifDepthTexture; 

out vec4 fragColor; 

void main() 
{ 
    vec2 texcoord = gl_FragCoord.xy/UnifDepthPass.mScreenSize; 

    float depthValue = texture(unifDepthTexture, texcoord).x; 
    depthValue = (2.0 * UnifDepthPass.mZNear)/(UnifDepthPass.mZFar + UnifDepthPass.mZNear - depthValue * (UnifDepthPass.mZFar - UnifDepthPass.mZNear)); 

    fragColor = vec4(depthValue, depthValue, depthValue, 1.0); 
} 
+1

'GL_TEXTURE_COMPARE_MODE'는'sampler2D'를 사용하여 깊이 텍스처를 샘플링하는 것이 정의되지 않았으며 (아마도 모든 검은 텍셀을 생성 할 것입니다) 사용하지 않는 것을 잊었을 것입니다. 샘플러 객체를 사용하는 경우 실제 쉐도우 프로세스에 대해 비교가 활성화 된 다른 샘플러 객체를 사용할 수 있으며 깊이 버퍼를 시각화하려는 경우 비교가 비활성화 된 다른 샘플러 객체를 사용할 수 있습니다. 그렇지 않은 경우이 상태는 텍스처 단위 객체입니다. –

+0

예, 답변으로 추가했습니다. – KaiserJohaan

답변

1

을 renderering 때 GL_COMPARE_R_TO_TEXTUREGL_TEXTURE_COMPARE_MODE 세트로 깊이 텍스처를 샘플링하고있었습니다. 이는 실제로 깊이 텍스처로 그림자 매핑을 수행하는 데 적합하지만 sampler2D을 사용하여 샘플링을 시도합니다. 합격/불합격 깊이 테스트 결과가 아닌 깊이 텍스처에 저장된 실제 깊이 값을 원하기 때문에 먼저 GL_TEXTURE_COMPARE_MODEGL_NONE으로 설정해야합니다.

심도 버퍼 시각화와 그림자 그리기 사이를 전환하려면 텍스처마다이 상태를 설정하는 것이 매우 불편합니다. 섀도우 매핑을 수행하는 셰이더의 경우 GL_COMPARE_R_TO_TEXTURE (sampler2DShadow과 호환)으로 설정된 샘플러 개체와 GL_NONE (sampler2D과 호환)을 사용하여 깊이 버퍼를 시각화하는 샘플러 개체를 사용하는 것이 좋습니다. 그렇게하면 셰이더가 실제로 깊이 텍스처를 사용하는 방법에 따라 텍스처 이미지 유닛 5에 바인딩 된 샘플러 오브젝트를 바꿀 수 있습니다.

관련 문제