픽셀쉐이더로 간단한 테스트를 해보려고 했더니, 텍스쳐 좌표를 버텍스에 추가하지 않은 것을 알게되었다.

이로인해, 간단하게 버텍스에 텍스쳐 좌표를 추가해주었다.

 

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);
    }
}

 

결과는 아래처럼 잘 나온다.

 

 

+ Recent posts