그림자 쉐이핑을 구현하려고하므로 깊이있는 텍스처로 렌더링하고 있습니다. 깊이 텍스처가 포함 된 프레임 버퍼를 바인딩하지 않고 기본 프레임 버퍼를 사용하면 화면에 출력됩니다. 그러나 멀리 떨어진 조각에 대해서는 흰색 대신 빨간색입니다.OpenGL이 깊이 텍스처 - 붉은 색으로 렌더링됩니까?
이 내 조각 쉐이더이다 : 그것은 문제
#version 330
out float fragmentdepth;
uniform sampler2D inputTex;
void main(){
fragmentdepth = gl_FragCoord.z;
}
인가? 쉐도우 맵핑이 작동하지 않기 때문에 이것을 문제의 원인으로 배제하고 싶습니다.
깊이 텍스처에 쓰는 경우 왜 깊이를 컬러 버퍼로 출력합니까? 기본적으로이 쉐이더의 메모리 대역폭 요구 사항은 두 배가됩니다. 깊이가 FBO의 깊이 부착 점에 첨부 된 값에 쓰여지기 때문입니다. –
기억이 나지 않지만'gl_FragColour'처럼'gl_FragDepth'가 삭제되지 않았습니까? 만일'fragmentdepth'가 COLOUR_ATTACHMENT0에 대한 RGBA 출력에서 단순히 적색으로 취급되고 있다면 이것은 의미가 있습니다. 깊이 텍스처 대신 부동 소수점 컬러 텍스처에 깊이를 쓰려고하지만 어쨌든 여전히 깊이 테스트가 필요한 경우가 아니면 @ AndonM.Coleman이 지적한대로 대역폭이 두 배가 될 것입니다. 어쩌면'gl_FragDepth'에 글쓰기를 시도할까요? – jozxyqk
확실히, 'gl_FragDepth'가 여전히 존재하지 않습니다. 그러나 하드웨어 깊이 최적화 (Hi-Z, 초기 깊이 테스트 등)를 많이 수행하기 때문에 셰이더에서 아무 것도 쓰지 않는 것이 좋지 않습니다. –