공부 중 메모/DirectX

Shader // Vertex.vsh, Pixel.psh, Geo.gsh

라이피 (Lypi) 2019. 4. 24. 10:12
반응형

이 카테고리에 포스팅하던 내용이 어디갔는지 못 찾겠다!!

 

그러므로 걍 눈에 보이는 쉐이더 파일 중 제일 있어 보이는 것 올림....

 

사실 쉐이더에 대한건 깊게 파는게 아닌 이상 그냥 기본적인 구조만 이해하면 짤 수 있다.

 

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();
}
반응형