픽셀쉐이더로 간단한 테스트를 해보려고 했더니, 텍스쳐 좌표를 버텍스에 추가하지 않은 것을 알게되었다.
이로인해, 간단하게 버텍스에 텍스쳐 좌표를 추가해주었다.
struct Vertex
{
DirectX::SimpleMath::Vector3 Position;
DirectX::SimpleMath::Vector3 Color;
DirectX::SimpleMath::Vector3 Normal;
DirectX::SimpleMath::Vector2 TexCoord;
};
먼저, 버텍스 구조체에 TexCoord 변수를 추가해주었다.
텍스쳐 좌표는 x,y만 있으면 되기떄문에 vector2로 선언해주었다.
이에맞게 인풋 레이아웃도 변경해주었다.
std::vector<D3D11_INPUT_ELEMENT_DESC> inputElements =
{
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 4 * 3, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 4 * 3 * 2, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 4 * 3 * 3, D3D11_INPUT_PER_VERTEX_DATA, 0},
};
이렇게, TexCoord도 인풋레이아웃에 추가해주었다.
여기서 주의해야 할 점은 데이터 포멧을 꼭 맞춰주자....
본인은 TexCoord를 vector2로 선언한 것을 잊고 위에 데이터 포벳을 DXGI_FORMAT_R32G32B32_FLOAT로 설정하였는데, 이로 인해 렌더링이 제대로 안되는 상황을 겪었다..
혹시나 하고 보니까 데이터 포멧이 잘못되어있었고, 위 코드처럼 R32G32로 수정했더니, 아주 잘 되는 것을 확인할 수 있었다.
텍스쳐 좌표를 테스트하기 위해, 픽셀쉐이더에 간단한 코드를 추가하였다.
struct PixelShaderInput
{
float4 pos : SV_POSITION;
float3 color : COLOR;
float2 TexCoord : TEXCOORD;
};
float4 main(PixelShaderInput _Input) : SV_TARGET
{
if(_Input.TexCoord.x > 0.5f)
{
return float4(1.0f, 0.0f, 0.0f, 1.0f);
}
else
{
return float4(0.0f, 0.0f, 1.0f, 1.0f);
}
}
결과는 아래처럼 잘 나온다.
'프로젝트 > Direct X 그래픽스' 카테고리의 다른 글
프로젝트 : DirectX를 활용한 그래픽스 (10 - 텍스쳐링) (0) | 2024.05.07 |
---|---|
프로젝트 : DirectX를 활용한 그래픽스 (9 - 상수버퍼 구조 변경) (0) | 2024.05.06 |
프로젝트 : DirectX를 활용한 그래픽스 (7 - 렌더링) (1) | 2024.05.02 |
프로젝트 : DirectX를 활용한 그래픽스 (6 - 버텍스 쉐이더, 인풋 레이아웃, 픽셀 쉐이더) (1) | 2024.05.01 |
프로젝트 : DirectX를 활용한 그래픽스 (5 - 상수 버퍼) (0) | 2024.05.01 |