2 차원 텍스처 S가 있고 3 차원 텍스처 H를 반환하고자합니다. 즉, 픽셀 H [r, g, b]가 텍스처 S의 색상 rgb 픽셀 수와 같습니다. 기본적으로 히스토그램 텍스처의 색이.webgl 조각 쉐이더에서 색상으로 픽셀 수를 계산하십시오.
나는 occlusion 쿼리에 대해 알고 있지만, webgl2에서만 사용할 수 있으며, 심지어 부울 결과가있는 IIUC도 있으며 각 색마다 별도의 쿼리를 수행해야합니다. 이상적으로는 하나의 조각 셰이더 패스에서이 작업을 수행하고 싶습니다. 프래그먼트 쉐이더에서 작업을 줄일 수있는 방법이 있습니까? (당신이 관심이 있다면)
왜이 필요합니다 I가 WebGL 조각 쉐이더에있는 객체 및 정적 지형 사이의 픽셀 완벽한 2D 충돌 감지를 할 노력하고있어.
옛날부터 트릭을 사용하여 (0,0), (0, dy), (dx, 0) 및 (dx, dy) 픽셀만큼 이동하여 스프라이트를 4 번 그리기 - 매번 스프라이트의 픽셀이 지형과 충돌합니다. 가능한 한 빨리 지형의 바운스로 이동해야하는 방향을 나타내는 벡터 (nx, ny)를 계산할 수 있습니다. 객체의 속도에 벡터를 추가하기 만하면 객체가 지형을 따라 멋지게 움직입니다 (언덕 아래로, 범프 위로 점프 등). 나는 오래된 C++ 게임에서 그 것을 사용했고 그것은 훌륭하게 작동하지만, 너무 느리다.
게임에서 모든 스프라이트의 정점 버퍼 전체를 그린다. (어떤 오브젝트가 충돌 하는지를 인식 할 수 있도록 각기 다른 색상으로되어있다.) 매번 4 번 그 위에 검은 지형을 그려서 각각의 픽셀을 센다. 결과로 나오는 4 개의 프레임 버퍼의 색상.
문제는 - 조각 쉐이더에서 픽셀 수를 계산하는 방법입니다.
소리가 복잡하고 불가능합니다. 각 채널에 대해 .5를 추가로 혼합 한 다음 스프라이트마다 별도의 영역 내에서 .75 이상의 렌더링 텍스처를 확인하도록 제안했습니다. – Jessy
분명히 복잡하지만 불가능한 것은 아닙니다.히스토그램은 HDR tonemapping과 같은 많은 실시간 응용 프로그램에서 매우 필요합니다. 반면, 조각 쉐이더를 한 번 호출 할 때 WebGL 클래스 하드웨어에서는 불가능하거나 최소한 실용적이지 않습니다. 'imageLoad (...)와'imageStore (...)를 사용하면 DX11 클래스 하드웨어에서 가능할 수 있지만 여전히이 문제에 접근하는 좋은 방법처럼 들리지는 않습니다;) –