💽 Struct?
여러 데이터를 하나의 그룹으로 묶어 사용할 수 있게 해주는 데이터 형식이다.
관련 데이터를 논리적으로 묶어 코드의 가독성과 유지보수성을 높일 수 있다. struct는 입력과 출력의 정리, 버퍼의 데이터 관리 등 다양한 용도로 사용된다.
💽 구조체 인스턴스 생성
먼저 사용할 구조체를 정의한다. 예시로 position, color, intensity 데이터를 포함한 Light 라는 구조체를 정의한다.
//HLSL
struct Light {
float3 position;
float3 color;
float intensity;
};
구조체를 정의한 후, 해당 구조체 타입의 변수를 선언하여 인스턴스를 만든다.
//HLSL
Light myLight;
HLSL에서는 구조체 인스턴스를 선언한 후, 다음과 같이 인스턴스를 초기화할 수 있다.
//HLSL
myLight.position = float3(1.0f, 2.0f, 3.0f);
myLight.color = float3(1.0f, 1.0f, 1.0f);
myLight.intensity = 0.8f;
또는 선언과 동시에 초기화할 수 있다.
//HLSL
Light myLight = { float3(1.0f, 2.0f, 3.0f), float3(1.0f, 1.0f, 1.0f), 0.8f };
💽 구조체 인스턴스 사용
구조체 인스턴스의 필드를 사용하여 셰이더 코드를 작성할 수 있다.
//HLSL
struct Light {
float3 position;
float3 color;
float intensity;
};
Light myLight;
myLight.position = float3(1.0f, 2.0f, 3.0f);
myLight.color = float3(1.0f, 1.0f, 1.0f);
myLight.intensity = 0.8f;
float3 ApplyLighting(float3 surfaceColor)
{
float3 lightDir = normalize(myLight.position - surfacePosition);
float3 lightEffect = myLight.color * myLight.intensity * max(dot(normal, lightDir), 0.0f);
return surfaceColor * lightEffect;
}
💽Ref.
https://learn.microsoft.com/ko-kr/windows/win32/direct3dhlsl/dx-graphics-hlsl-struct
반응형
'HLSL' 카테고리의 다른 글
커스텀 노드로 픽셀 이펙트 (노이즈 패턴) 만들기 (0) | 2024.12.12 |
---|---|
루프 패턴 만들기 (0) | 2024.10.29 |
원 그리기 + 타일링 (0) | 2024.10.28 |