나는 당신이 (적어도 그것을 천천히해야한다, 나는 현재의 GPU의가 가속화 생각하지 않는다)를 XOR 비트를 어떻게 잘 모르겠지만, 여기 내 생각 :
- 는 두 개의 입력을 가지고 이미지
- 오 클루 전 쿼리를 켭니다.
- abs (texel1-texel2)를 계산하는 프래그먼트 셰이더를 사용하여 화면에 두 개의 이미지 (두 개의 텍스처가 설정된 전체 화면 쿼드)를 그려야하며 픽셀이 (예 : GLSL의 경우 discard) 동일 (차이가 0 이하이거나 특정 임계 값 미만). 가장 쉬운 방법은 아마도 GLSL 조각 셰이더를 사용하는 것일뿐입니다. 두 텍스처를 읽고 abs()를 계산하여 픽셀을 버리면됩니다. 아주 기본적인 GLSL 지식으로 충분합니다.
- 쿼리를 통과 한 픽셀 수를 가져옵니다. 동일한 픽셀의 경우 쿼리가 통과하지 않고 (픽셀은 셰이더에서 무시됩니다), 다른 픽셀의 경우 쿼리가 전달됩니다.
처음에는 깊이 버퍼가 포함 된 더 복잡한 접근 방법을 사용했지만 픽셀을 죽이는 것으로 충분하다는 것을 알았습니다. 여기에 내 원래 생각이다 (그러나 위의 사람은 더 간단하고 효율적이다) :
- 화면 (즉, 전체 화면 쿼드로에 두 개의 입력 영상
- 명확 화면과 깊이 버퍼
- 두 이미지를 그릴 수있다 두 개의 텍스처가 설정 됨), abs (texel1-texel2)를 계산하고 픽셀이 다른 경우 GWL에서 discard을 삭제하는 조각 쉐이더가 있습니다. 쿼드를 그려서 깊이 버퍼 값이 평면 근처에있는 값이되도록합니다.
- 이 단계 이후에 깊이 버퍼에는 동일한 픽셀의 작은 깊이 값과 다른 픽셀의 큰 (먼 평면) 깊이 값이 포함됩니다.
- 오 클루 전 쿼리를 켜고 깊이가 원거리보다 가깝지만 이전 쿼드보다 큰 다른 전체 화면 쿼드를 그립니다.
- 쿼리를 통과 한 픽셀 수를 가져옵니다. 동일한 픽셀의 경우 쿼리가 통과하지 않고 (깊이 버퍼가 이미 가까이 있음), 다른 픽셀의 경우 쿼리가 통과합니다. 이를 얻으려면 SAMPLES_PASSED_ARB를 (를) 사용하십시오. 시작을 위해 CodeSampler.com에 교합 쿼리 예가 있습니다.
물론이 모든 것은 교합 쿼리 지원이있는 GPU를 필요로합니다. 2002 년 이후로 대부분의 GPU는 일부 저가형 프로세서 (특히 Intel 915 (일명 GMA 900) 및 Intel 945 (일명 GMA 950) 제외)를 지원합니다.
글쎄, 네, 그게 제가 생각한 것입니다,하지만 웹에 코드 예제가 있습니까? 특히 "abs (texel1-texel2)"및 "쿼리를 통과 한 픽셀 수"를 계산합니다. –
@yoihj : 이것은 매우 기본적인 GLSL 및 폐색 쿼리 사용법입니다. GLSL 튜토리얼을 찾아보고 occlusion 쿼리 샘플에 대한 링크를 추가했습니다. – NeARAZ