2013-07-24 6 views
0

전 3D 프로그래밍에 익숙하지 않습니다. 최근 uv 매핑이 혼란 스럽다는 것을 발견했습니다. 사용stage3d uv 매핑은 어떻게 작동합니까?

tex ft0, v1, fs0 <2d,repeat,nomip> 
mov oc, ft0 

나는 그대로이 일, 질감 비트 맵에 대한 UV 좌표로 v1 및으로 fs0을 제공합니다. 텍스처가 3D 객체를 래핑했습니다.

그러나 ft0을 한 좌표 v1로 한 번만 복사했는데 시스템이 다른 영역을 채우는 방법을 어떻게 알았습니까?

그리고 나는 꼭지 좌표를 제공하지 않았으며, 조각 프로그램은 모든 픽셀이나 모든 꼭지점 렌더링을 호출합니까?

답변

0

음, 우선은 'V1':(변화시키는 레지스터 1) 버텍스 쉐이더에서가 있어요 : mov vX, vaX 또는 기타 작업 : 당신의 (정점 속성) 'VAX', 보통 중 하나를 설정하면 .
변화하는 레지스터 (예 : 'v1')는 삼각형을 구성하는 세 개의 정점에 대해 uv (즉 'vaX')의 값을 보간합니다.
참고 : 다양한 레지스터가 버텍스 및 조각 쉐이더 사이에서 통신 할 수있는 유일한 방법입니다. 화소마다

상기 "TEX" 기능 하는 샘플 샘플러 '으로 fs0'괄호 사이의 규칙의 영역에서 V1 ( rasterise)는 (< 2D 반복 즉 것 nomip>). V1은 (Z 일 수있다 [W, X, Y, Z] VA1 (1) X, Y, Z, w]VA1 (2) 말에서 실행하는 ft0 = fs0.getPixel(v1) 같이 제 1 라인의
생각 조명 및 기타 효과에 사용됨),이 하나의 픽셀/조각을 'oc' (출력 색상)으로 출력합니다.

조각 쉐이더는 픽셀 쉐이더라고도하며 모든 픽셀마다 한 번 호출됩니다.
한편 픽셀 쉐이더는 모든 버텍스에 대해 한 번 호출됩니다.
Geometry 셰이더라고하는 세 번째 유형의 셰이더가 있지만 Stage3D/AGAL에서는 사용할 수 없습니다.

+0

설명을 주셔서 고맙습니다. 제가 틀렸다면 제게 많은 도움이됩니다. – davyzhang

+0

이 트릭의 주된 트릭은 고정 된 값이 아닌 가변 레지스터 * 3 개의 꼭지점 사이의 값을 보간하는 알고리즘을 가지고 있으므로 버텍스 쉐이더에 의해 설정된 후에 v1이 모든 픽셀마다 바뀌고 텍스처로부터 다른 rgb 데이터를 얻는다. 그것을 출력하십시오. – davyzhang

+0

오신 것을 환영합니다! 그래, 그건 기본적으로, 당신은 'rgba'데이터를 의미했습니다. – chadiik

1

그냥 명확히하기 위해 - 모든 픽셀에 대해 쉐이더를 호출 할 필요가 없습니다. 버텍스와 프래그먼트 쉐이더에 올바른 텍스처와 상수를 제공한다면, (버텍스와 프래그먼트 쉐이더 모두를 사용하여) 프로그램 3D를 업로드하면 충분합니다. context3D.drawTriangles (...)를 호출 한 다음 context3D.present를 호출하면 GPU가 렌더링을 분류합니다.

+0

해명 해 주셔서 감사합니다. – davyzhang