정점 셰이더
float4x4 gWorldMatrix;
float4x4 gViewMatrix;
float4x4 gProjectionMatrix;
struct VS_INPUT
{
float4 mPosition : POSITION;
};
struct VS_OUTPUT
{
float4 mPosition : POSITION;
};
VS_OUTPUT vs_main(VS_INPUT Input)
{
VS_OUTPUT Output;
Output.mPosition = mul(Input.mPosition, gWorldMatrix);
Output.mPosition = mul(Output.mPosition, gViewMatrix);
Output.mPosition = mul(Output.mPosition, gProjectionMatrix);
return Output;
}
// 전역변수 vs 정점 데이터
모든 정점이 동일한 값 사용하느냐의 여부로 구분된다.
동일하다면 전역변수다.
// 시맨틱
정점의 위치를 입력 받아야한다.
Direct X의 정점버퍼로부터 시맨틱을 통해 받을 수 있다.
POSITION이라는 시맨틱을 통해 입력 받는다.
필요한 정보를 빼오는 것을 시맨틱이라고 한다.
float4 mPosition: POSITION; 의 의미는 위치 정보를 가져와 대입하라라는 명령이다.
// 위치변환 필수
위치 변환 결과를 래스터 라이저에 전달해줘야만 한다.
따라서 반드시 위치변환 결과를 반환해야한다.
- 공간변환
// 물체공간 (지역공간, object space, local space)
각 물체가 가지는 자신만의 좌표계이다.
// 월드공간
두 개 이상의 물체를 통일적으로 처리하기 위한 공간이다.
// 뷰 공간
카메라가 사용하는 공간을 의미한다.
원점은 카메라 렌즈의 정중앙이다.
정중앙으로부터 오른쪽, 위쪽, 앞쪽 3개의 축을 만든다.
// 투영공간
원근을 반영한다.
인간의 시야처럼 만든다.
투시법을 적용한다.
// 정리
행렬 3개를 구해야한다.
각 공간의 원점과 세 축을 알면 그 공간을 나타내는 행렬을 만들 수 있다.
모든 행렬은 전역변수로 선언한다.
물체 공간 -> 월드공간 -> 뷰공간 -> 투영공간
위 변환에서 월드행렬, 뷰 행렬, 투영행렬이 순차적으로 사용된다.
- 기타
// mul 함수
HLSL의 내장함수이다.
여러 데이터형 간의 곱셈을 처리해준다.
위 코드에서는 행렬과 벡터의 곱셈을 처리하였다.
픽셀 셰이더
float4 ps_main() : COLOR
{
return( float4( 1.0f, 0.0f, 0.0f, 1.0f ) );
}
픽셀의 색을 빨간색으로 반환한다.
// : COLOR의 의미 (ps_main의 헤더부분)
ps_main 함수의 반환값을 백버퍼의 색상값으로 처리한다.
'셰이더 (Shader) > 셰이더 프로그래밍 입문 - Pope Kim (완)' 카테고리의 다른 글
[HLSL] 챕터6 - 툰셰이더 (0) | 2023.03.19 |
---|---|
[HLSL] 챕터5 - 디퓨즈 / 스페큘러매핑 (0) | 2023.03.18 |
[HLSL] 챕터4 - 조명셰이더 기초 (0) | 2023.03.18 |
[HLSL] 챕터3 - 텍스쳐매핑 (0) | 2023.03.18 |
[HLSL] 챕터1 - 셰이더란? (0) | 2023.03.18 |
댓글