반응형
이 카테고리에 포스팅하던 내용이 어디갔는지 못 찾겠다!!
그러므로 걍 눈에 보이는 쉐이더 파일 중 제일 있어 보이는 것 올림....
사실 쉐이더에 대한건 깊게 파는게 아닌 이상 그냥 기본적인 구조만 이해하면 짤 수 있다.
Vertex.vsh
struct VS_INPUT
{
float3 p : POSITION;
float4 c : COLOR;
float2 t : TEXCOORD;
};
struct VS_OUTPUT
{
float4 p : SV_POSITION; // 시멘틱(의미구조)
float4 c : COLOR0;
float2 t : TEXCOORD0;
};
VS_OUTPUT VS( VS_INPUT vIn )
{
VS_OUTPUT vOut = (VS_OUTPUT)0;
vOut.p = float4(vIn.p.x, vIn.p.y, vIn.p.z, 1.0f);
vOut.t = vIn.t;
vOut.c = vIn.c ;
return vOut;
}
VS_OUTPUT VS2( VS_INPUT vIn )
{
VS_OUTPUT vOut = (VS_OUTPUT)0;
vOut.p = float4(vIn.p.x, vIn.p.y, vIn.p.z, 1.0f);
vOut.t = vIn.t;
vOut.c = vIn.c * float4(1,1,0,1);
return vOut;
}
VS_OUTPUT VS3( VS_INPUT vIn )
{
VS_OUTPUT vOut = (VS_OUTPUT)0;
vOut.p = float4(vIn.p.x, vIn.p.y, vIn.p.z, 1.0f);
vOut.t = vIn.t;
vOut.c = vIn.c* float4(1,0,0,1);
return vOut;
}
Pixel.psh
Texture2D g_txTextureA : register(t0);
SamplerState sample0 : register(s0);
struct VS_OUTPUT
{
float4 p : SV_POSITION;
float4 c : COLOR0;
float2 t : TEXCOORD0;
};
struct PS_OUTPUT
{
float4 c : SV_TARGET;
};
PS_OUTPUT PS( VS_OUTPUT vIn)
{
PS_OUTPUT vOut;
vOut.c = g_txTextureA.Sample(sample0, vIn.t);
return vOut;
}
struct VS_OUTPUT
{
float4 p : SV_POSITION;
};
[maxvertexcount(9)]
void GS( triangle VS_OUTPUT input[3], inout TriangleStream TriStream )
{
VS_OUTPUT output;
// 페이스의 중점을 구한다.
float3 centerPos = (input[0].p.xyz + input[1].p.xyz + input[2].p.xyz)/3.0;
// 정점 당 계산된 중점을 사용하여 페이스를 추가한다.
for( int i=0; i<3; i++ )
{
output.p = input[i].p;
TriStream.Append( output );
int iNext = (i+1)%3;
output.p = input[iNext].p;
TriStream.Append( output );
output.p = float4(centerPos,1);
TriStream.Append( output );
TriStream.RestartStrip();
}
TriStream.RestartStrip();
}
반응형