2015-01-20 15 views
0

이유가 무엇이든간에 렌더러는 첫 번째 인수에 대한 의미를 무시하고 항상 픽셀 위치를 전달합니다. 다른 인수가 SV_POSITION의 의미를 가지고 있더라도 위치는 여전히 첫 번째 인수로 전달됩니다. 이것에 대한 이유가 있습니까?HLSL 픽셀 셰이더의 첫 번째 인수

버텍스 쉐이더 :

cbuffer transforms 
{ 
    float4x4 view, projection; 
}; 

void main(
    in float4 inPos : POSITION, in float3 inNorm : NORMAL, 
    out float4 outPos : SV_POSITION, out float3 outNorm : TEXCOORD0 
    ) 
{ 
    outPos = mul(projection, mul(view, inPos)); 
    outNorm = inNorm; 
} 

픽셀 쉐이더 : POSITIONSV_Position은 기본적으로 동일한 것을 의미하기 때문이다

void main(
    float4 inPos : SV_POSITION, in float3 inNorm : TEXCOORD0, 
    out float4 outClr : SV_TARGET 
    ) 
{ 
    outClr.xyz = inNorm * 0.5 + 0.5; 
    outClr.w = 1.0; 
} 

답변

0

. POSITION은 정점 위치에 대한 Direct3D 9 시대의 의미입니다. SV_Position은 정점 위치에 대한 Direct3D 10+ 시대의 의미입니다.

당신은 여기에 다른 패턴의 번호를 사용할 수 있지만 패턴으로 가고, 당신은 위치에 대한 inout을 사용해야합니다 또한

void main(
    inout float4 pos : SV_Position, in float3 inNorm : NORMAL, 
    out float3 outNorm : TEXCOORD0 
    ) 
{ 
    pos = mul(projection, mul(view, pos)); 
    outNorm = inNorm; 
} 

, 당신은 POSITION 당신의 HLSL 사용과 일치해야 대신 버텍스 쉐이더에서 SV_Position을 사용하고 Direct3D 10.x/11.x 입력 레이아웃을 선언하는 방법과 VS와 PS가 적절히 바인딩되도록하십시오.

+0

그래서 입력 요소 기술자가''POSITION ", 0"을 사용하더라도 여전히 VS에'SV_Position'을 지정해야합니까? –