본문 바로가기
기본 쉐이더

스터디 - Fx(UV맵을 활용한 효과)

by Raypop 2010. 12. 4.

소스는 라이팅을 뺀 기본 맵핑 소스로만 구성하였다.

그리고 빨간색으로 된 부분은 금일 공부할 내용들이다.

 

========================================================================================

 

//------------------------------------
float4x4 matWVP : WorldViewProjection;

texture diffuseTexture
<
 string ResourceName = "default_color.dds";
>;
sampler diffuseSampler = sampler_state
{
 texture = <diffuseTexture>;
};

 

float time : TIME; // 쉐이더에서 유일하게 가변변수로 사용할수 있는 변수로 시간에 따른 맵의 움직임을 제어하기 위해 사용되었다


//------------------------------------
struct vertexInput {
    float3 Position  : POSITION;
    float2 UV    : TEXCOORD0; 
};

struct vertexOutput {
    float4 HPosition   : POSITION;
    float2 UV    : TEXCOORD0;
};

//------------------------------------
vertexOutput VS_TransformDiffuse(vertexInput IN)
{
    vertexOutput OUT;
    OUT.HPosition = mul( float4(IN.Position.xyz , 1.0) , matWVP);

    float2 moveUV = IN.UV; // UV 작업을 위해 임이의 변수를 선언했다

    //OUT.UV.y = -moveUV.x + 1;  // x축의 UV를 플립 시킨다. 0 ~ 1 까지의 라인을 -1 ~ 0 으로 뒤집어준뒤 1 만큼 이동시켜주는 원리

    OUT.UV.y = pow((-moveUV.x + 1),2); // 제곱을 함으로 인해 맵을 한쪽으로 쏠리게 할수 있다.(0에서 1사이의 제곱을 하게 되면 커브곡선으로 되는 원리를 이용)

    //OUT.UV.x = moveUV.y;  // U와 V의 위치를 바꾸기 위한 코드

    //OUT.UV.x = moveUV.y + time; // 뒤에 TIME은 시간에 의한 이동을 줄수 있다.(키값으로도 설정 가능)

    //OUT.UV.x = moveUV.y + sin(time); // 사인곡선으로 인해 좌우로 왔다갔다 하는 애니메이션이 가능

    //OUT.UV.x = moveUV.y + sin(time)*pow((IN.UV.x),2); // *IN.UV.x 으로 아래쪽을 고정시킨후 제곱을 함으로 인해 곡선을 가진 움직임을 만들었다.

       OUT.UV.x = moveUV.y + sin(time)*pow((IN.UV.x),2) + cos(time)*IN.UV.x;  // cos(time)*IN.UV.x 를 더해줌으로 기존에 한방향으로만 움직이던 것을 반대방향으로 엇갈리게 만들어 S자를 그리게 만들었다.     
   

    OUT.UV = IN.UV;
    return OUT;
}

float4 PS_TransformDiffuse(vertexOutput IN) : COLOR
{

     float4 diffuseColor = tex2D(diffuseSampler, IN.UV);
     return diffuseColor;
}

//-----------------------------------
technique textured
{
    pass p0
    {  
  VertexShader = compile vs_3_0 VS_TransformDiffuse();
  PixelShader = compile ps_3_0 PS_TransformDiffuse();
    }
}

'기본 쉐이더' 카테고리의 다른 글

Rim Lighting 의 원리와 공식  (0) 2011.08.27
Half Lambert 의 원리와 공식  (0) 2010.12.09
스터디 - 스페큘러맵  (0) 2010.11.28
스터디 - 기본 노멀맵  (0) 2010.11.16
빛에 관한 공식  (0) 2010.09.16