응애맘마조

230608 강의 본문

공부/3D강의

230608 강의

TH.Wert 2023. 6. 8. 23:15

광원으로 빛을 비추는 코드에 대해서 했었습니다.

#include "Common.hlsl"

struct VertexInput
{
    float4 Position : POSITION0;
    float4 Color : COLOR0;
    float4 Normal : NORMAL0;
};
struct PixelInput
{
    float4 Position : SV_POSITION;
    float4 Color : COLOR0;
	float4 Normal : NORMAL0;
	float3 wPosition : POSITION0;
};

PixelInput VS(VertexInput input)
{
   
    PixelInput output;
    output.Color = input.Color;
    output.Position = mul(input.Position, World);
	output.wPosition = output.Position.xyz;
    output.Position = mul(output.Position, ViewProj);
	input.Normal.w = 0.0f;
	output.Normal = mul(input.Normal, World);
    
    return output;
}

float4 PS(PixelInput input) : SV_TARGET
{
    //world space light
	float3 light = normalize(-float3(1, -1, 1));
    //world space normal
	float3 normal = normalize(input.Normal);
    
	float diffuse = saturate(dot(light, normal));
	float ambient = 0.3f;
	float3 lambert =(diffuse + ambient) * input.Color.rgb;
	float3 Reflect = reflect(normalize(float3(1, -1, 1)), normal);
	float3 viewDir = normalize(ViewPos.xyz - input.wPosition);
	float3 specular = pow(saturate(dot(Reflect, viewDir)), 20.0f) * float3(1, 1, 1);
    
	return float4(lambert + specular, 1);
}

과제로부터 했었던 퐁쉐이딩으로 해서 일정 방향으로 비추게 될 수 있습니다. 광원의 크기는 specular에서 20.0f 말고 다른 값으로 바꾸면 크기를 바꿀 수 있습니다.

 

읽어주셔서 감사합니다.

'공부 > 3D강의' 카테고리의 다른 글

230612 강의  (0) 2023.06.12
230609 강의  (1) 2023.06.11
230607 강의  (0) 2023.06.07
회전보간  (0) 2023.06.05
230602 강의  (0) 2023.06.05