Study/RenderMonkey - 2019년 백업

[RenderMonkey] Vertex Animation

김성인 2023. 12. 6. 23:32

[RenderMonkey] Vertex Animation


// Vertex Shader

float4x4 gWorldMatrix;
float4x4 gViewMatrix;
float4x4 gProjectionMatrix;

float4 gWorldLightPosition;
float4 gWorldCameraPosition;

float gTime;
float gWaveHeight;
float gSpeed;
float gWaveFrequency;
float gUVSpeed;

struct VS_INPUT
{
	float4 mPosition : POSITION;
	float3 mNormal : NORMAL;
	float2 mUV : TEXCOORD0;
};

struct VS_OUTPUT
{
	float4 mPosition : POSITION;
	float2 mUV : TEXCOORD0;
	float3 mDiffuse : TEXCOORD1;
	float3 mViewDir : TEXCOORD2;
	float3 mReflection : TEXCOORD3;
};

VS_OUTPUT vs_main(VS_INPUT Input)
{
	VS_OUTPUT Output;

	float cosTime = gWaveHeight * cos(gTime * gSpeed + Input.mUV.x * gWaveFrequency);
	Input.mPosition.y += cosTime;

	Output.mPosition = mul(Input.mPosition, gWorldMatrix);

	float3 lightDir = Output.mPosition.xyz - gWorldLightPosition.xyz;
	lightDir = normalize(lightDir);

	float3 viewDir = normalize(Output.mPosition.xyz - gWorldCameraPosition.xyz);
	Output.mViewDir = viewDir;

	Output.mPosition = mul(Output.mPosition, gViewMatrix);
	Output.mPosition = mul(Output.mPosition, gProjectionMatrix);

	float3 worldNormal = mul(Input.mNormal, (float3x3)gWorldMatrix);
	worldNormal = normalize(worldNormal);

	Output.mDiffuse = dot(-lightDir, worldNormal);
	Output.mReflection = reflect(lightDir, worldNormal);

	//Output.mUV = Input.mUV + float2(gTime * 0.25f, 0);
	Output.mUV = Input.mUV + float2(gTime * gUVSpeed, 0);

	return Output;
}

'Study > RenderMonkey - 2019년 백업' 카테고리의 다른 글

[RenderMonkey] Shadow 2/2  (1) 2023.12.06
[RenderMonkey] Shadow 1/2  (0) 2023.12.06
[RenderMonkey] UV Animation  (1) 2023.12.06
[RenderMonkey] Environment Sampler / Cube Map  (0) 2023.12.06
[RenderMonkey] Normal Mapping  (1) 2023.12.06