문제를 좀 더 자세하게 정의하기 전에 모든 것을 어떻게 설정했는지 설명해야합니다.AGAL : 프래그먼트 셰이더에서 화면 공간 위치 계산
_vertices = Vector.<Number>([
-1, -1, 0, 0, 0,
1, -1, 0, 1, 0,
1, 1, 0, 1, 1,
-1, 1, 0, 0, 1
]);
_indices = Vector.<uint>([
0, 2, 1,
0, 3, 2
]);
아무것도 공상 여기서 않을 :
기본적 I는 (X, Y, Z, U는 V)로 정의 단순한 평면 메쉬를 갖는다. 그러나, 내가 이것을 렌더링하는 방법은 모든 것이 떨어지는 곳입니다. 두 개의 렌더링 패스를 사용하여 렌더링됩니다. 첫 번째는 단순히 출력에 색상을 복사하고 512x512 텍스처로 렌더링하는 단순한 조각 쉐이더입니다. 그래도 모든 것이 잘 작동합니다. 두 번째 렌더링 패스에 문제가 있습니다.두 번째 최종 렌더링 패스는 동일한 지오메트리를 렌더링하지만 첫 번째 패스에서 렌더링 된 텍스처에서 fragmen (픽셀)의 색상을 가져와야합니다. 그게 내 문제가 어디서 오는지, 제대로 화면 공간 좌표 또는 UV 좌표에서 현재 픽셀의 위치를 정확하게 계산하는 방법이 필요하므로 정확하게 텍스처에서 추출 할 수 있습니다.
나는이 위치를 계산하는 방법에 대한 연구를 해왔지만 어떻게 든 만화경과 같은 효과를 만들어 냈습니다. Y 축선을 X 또는 Z 축 메쉬 회전 아닌 경우 다음과 같이이 효과는, 그러나, 오직 명백한
번째 패스에 사용되는 단편 프로그램이 생성 한 효과 모양은 다음과 같습니다.
div ft0.x, v0.x, v0.w // Divide vertex positions (v0.xy) with clip-space position (v0.w)
div ft0.y, v0.y, v0.w // to obtain screen coordinates as -1,1
mul ft0.x, ft0.x, fc0.x // Multiply positions (ft0.xy) by 0.5 (fc0.x)
mul ft0.y, ft0.y, fc0.x
add ft0.x, ft0.x, fc0.x // Finally add 0.5 (fc0.x) to positions (ft0.xy)
add ft0.y, ft0.y, fc0.x
tex ft1, ft0.xy, fs0 <2d, nearest, repeat, nomip> // Simply copy the pixel at (ft0) from the render buffer (fs0)
mov oc, ft1";
마지막으로, 저는이 모든 것에 매우 익숙합니다. 그래서 나는 명백한 무언가를 놓치고 있을지도 모른다. 그리고 그런 것에 따라 나는 사전에 사과한다.
그리고 코드가 존재하지 않는 영광을보고 싶다면 Github 레포는 here입니다.