커스텀 정점 포맷 추가하기
이 문서는 새로운 정점 포맷을 생성할 때 특정 정점 포맷 속성을 위한 커스텀 데이터 타입을 추가하는 방법에 대해 설명합니다. 사용 가능한 값은 아래에 나열된 데이터 타입 상수에 의해 정의됩니다.
정점 데이터 타입 상수
상수 | 설명 |
---|---|
vertex_type_float1 | 단일 부동 소수점 값 |
vertex_type_float2 | 두 개의 부동 소수점 값 |
vertex_type_float3 | 세 개의 부동 소수점 값 |
vertex_type_float4 | 네 개의 부동 소수점 값 |
vertex_type_colour | 네 개의 구성 요소 값 (r, g, b, a) |
vertex_type_ubyte4 | 네 개의 부호 없는 바이트 값 (0~255) |
이 상수들은 생성되는 셰이더 내에서 값이 "바인딩"될 수 있도록 정의되어야 합니다. DirectX와 OpenGL은 서로 다른 요구 사항이 있으므로, 올바르게 바인딩하지 않으면 셰이더에서 제대로 작동하지 않습니다.
정점 사용 타입 상수
상수 | 설명 |
---|---|
vertex_usage_position | 위치 값 (x, y, z) |
vertex_usage_colour | 색상 값 (r, g, b, a) |
vertex_usage_normal | 정점 노멀 값 (nx, ny, nz) |
vertex_usage_texcoord | UV 좌표 (u, v) |
vertex_usage_blendweight | 입력 행렬의 블렌드 가중치 (예: 스켈레탈 애니메이션) |
vertex_usage_blendindices | 사용할 행렬의 인덱스 (예: 스켈레탈 애니메이션) |
vertex_usage_depth | 정점 깊이 버퍼 값 |
vertex_usage_tangent | 탄젠트 값 |
vertex_usage_binormal | 바이노멀 값 |
vertex_usage_fog | 안개 값 |
vertex_usage_sample | 샘플러 인덱스 |
주의사항
vertex_format_add_custom
함수는 GLSL 셰이더를 사용할 때vertex_usage_position
,vertex_usage_colour
,vertex_usage_normal
,vertex_usage_texcoord
만 지원합니다. 이들은 각각 셰이더 속성in_Position
,in_Colour[0 - ...]
,in_Normal
에 매핑됩니다.- 일반적으로 가능한 모든 추가 매개변수에 대해
vertex_usage_texcoord
를 사용하는 것이 좋습니다.vertex_usage_blendweight
와vertex_usage_tangent
는 대부분의 셰이더 언어에서 거의 사용되지 않기 때문입니다. - GLSL ES는 정수 속성을 지원하지 않으므로
ivec4
를 전달하는 것은 작동하지 않습니다. 대신 텍스처 좌표를 전달하고 셰이더 내에서ivec4
로 변환해야 합니다.
예제 코드
vertex_format_begin();
vertex_format_add_texcoord();
vertex_format_add_custom(vertex_type_float3, vertex_usage_position);
my_format = vertex_format_end();
위 코드는 텍스처 좌표와 3개의 커스텀 부동 소수점 값을 위한 새로운 정점 포맷을 생성하고, 이를 변수 my_format
에 저장합니다.