2017-02-20 13 views
1

Open GL에서 일반 깊이 테스트가 활성화 된 다각형을 렌더링 할 수 있습니까? 그러나 깊이 버퍼 값이 깊이 버퍼에 실제로 기록 될 때 사용자 정의 값을 쓰고 싶습니까?깊이 비교에 사용 된 값과 다른 값을 깊이 버퍼에 쓰려면 어떻게해야합니까?

(이유는 장면의 지오메트리에 대해 깊이 테스트해야하는 입자 시스템을 렌더링하는 것이지만 입자 시스템이있는 곳에서 매우 큰 깊이 값을 쓰고 싶기 때문에 깊이를 사용합니다 상기 복수의 패스 렌더링없이)

요금 상기 질문을 구체화 것이 가능하다 입자 시스템 - 흐림 흐림 후 처리 단계?

+1

"is it possible"인 경우 대답은 '예'입니다. 씬을 FBO로 렌더링하고, 깊이 텍스처 첨부를 사용하여 프래그먼트 쉐이더에서 "수동"깊이 테스트 (깊이 테스트에 실패한 조각 파기)를 수행하고 임의의 깊이 값을 다른 깊이 버퍼로 출력 할 수 있습니다 원하는 경우 FBO에서 블리 팅하여 초기화 됨). 이 모든 것의 공연에 대한 보장은 없습니다 ... – peppe

+0

감사합니다. –

+0

나는 ARB_conservative_depth를 사용한 적이 없지만 문제를 해결할 수 있습니다. – pleluron

답변

3

당신은하지 않습니다.

OpenGL에서 거짓말을 허용하지 않습니다. 깊이 테스트는 깊이 버퍼에 기록 될 수신 값에 대해 깊이 버퍼의 값을 테스트합니다. 테스트가 통과되면 테스트 된 깊이 값이 깊이 버퍼에 기록됩니다. 기간.

깊이 테스트를 사용하여 깊이 값을 테스트하는 것 외에 다른 작업을 수행 할 수 없습니다.

ARB_conservative_depth/GL 4.2매우 제한된 형식을 허용합니다. 기본적으로 깊이를 원래 값보다 작거나 크게하는 방식으로 만 구현을 구현할 것을 약속합니다. 그러나 그때조차도, 그것은 특정한 경우에만 작동 할 것이고, 그리고 당신이 지정한 한도 내에서 머물러야 만.

시행 early fragment tests도 마찬가지로 허용하지 않습니다. 명세는 셰이더가 실행될 전에 깊이가 으로 작성된다는 것을 명시 적으로 명시합니다. 그래서 당신이 gl_FragDepth에 쓸 내용은 입니다.은 무시됩니다.

+0

감사합니다. 근본적으로 보수적 인 깊이가 나를 도왔을 것입니다. 그러나 저는 OpenGL es 3.0이므로 제 알고리즘을 다시 생각해야 할 것입니다. –

0

프래그먼트 셰이더에서 gl_FragDepth를 사용하여 사용자 정의 값을 쓸 수 있습니다.

gl_FragDepth = 0.3; 

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/gl_FragDepth.xhtml

+3

gl_FragDepth에 쓸 경우이 값을 사용하여 깊이 비교를 수행합니다. 이 질문은 명시된 깊이를 수정하는 방법을 명시 적으로 요구하지만 깊이 테스트 자체는 수정하지 않습니다. Afaik, 지오메트리를 두 번 렌더링하지 않으면 테스트와 쓰기에 다른 값을 사용할 수 없습니다. – BDL