2012-04-19 6 views
1

HLSL 버텍스 쉐이더에서 내 버텍스 선언을 읽으려면 어떻게해야합니까? 이 정보 의미 : 나는에 IDirect3DDevice9 :: GetVertexDeclaration()와 다른 일을 시도셰이더에서 정점 선언을 읽는 방법은 무엇입니까?

struct VS_INPUT 
{ 
    float4 position : POSITION; 
    float2 uv  : TEXCOORD; 
    float4 color : COLOR; 
}; 

을하지만 일을 가져올 수 없습니다. 그리기 전에 셰이더가 렌더링하려고하는 메쉬를 처리하는 것을 알 수 있도록이 정보가 필요합니다.

답변

1

메소드 SetVertexDeclaration 또는 SetFVF를 사용하면 다음 DrawCall에서 사용 된 Vertexbuffer의 형식을 설명합니다. 대부분의 경우 FVF만으로도 충분하지만, 예를 들어 normalmapping을 사용하는 경우 접선과 binormals가 필요합니다.이 접선은 정점 선언을 통해 설명 할 수 있습니다.

셰이더에는 정점 선언이나 이와 유사한 것이 없습니다. 구조체는 꼭지점 셰이더의 입력이 무엇인지를 설명합니다. 따라서 vertexdata와 shaderinput 사이에는 POSITION, TEXCOORD0, COLOR0 등의 태그가 매핑됩니다. "Position"태그로 정점 데이터를 표시하면 POSITION으로 표시된 쉐이더 변수의 변수에이 데이터가 채워집니다 . 정점 버퍼에 태그에 대한 정보가 없으면 값 필드가 모호합니다. 존재하지만 셰이더 구조에 태그가없는 모든 데이터는 생략됩니다.

올바른 방법은 당신이 다음 drawcall에 대한 vertex 데이터를 찾고 주어진 입력을 기대하는 올바른 셰이더를 선택하는 것입니다.

관련 문제