HLSL

HLSL 데이터 타입 Struct

z03y 2024. 12. 12. 18:53

💽 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

 

구조체 형식 - Win32 apps

구조체 형식

learn.microsoft.com

 

반응형

'HLSL' 카테고리의 다른 글

커스텀 노드로 픽셀 이펙트 (노이즈 패턴) 만들기  (0) 2024.12.12
루프 패턴 만들기  (0) 2024.10.29
원 그리기 + 타일링  (0) 2024.10.28