KoreanFoodie's Study
DirectX 11 2D 게임 프로그래밍 - 14. Texture 설정과 이미지 띄우기 본문
DirectX 11 2D 게임 프로그래밍 - 14. Texture 설정과 이미지 띄우기
화면에 이미지 띄우기
- ID3D11ShaderResourceView를 사용하여 텍스쳐 자원 생성
- 텍스쳐 좌표계는 좌측 상단이 시작점이고, 0~1 범위로 정규화되어 있음
- HLSL에서는 Texture2D 자료형으로 텍스쳐 자원을 받는다
- 해당 픽셀이 그려낼 텍스쳐 색상을 추출하기 위해 Sample 함수를 사용한다
투명한 픽셀 제거하기
- clip() 함수를 이용해 제거할 수 있다.
- if 문과 discard 키워드를 이용해 제거할 수 있다.
Execute.h
먼저 헤더 파일에서 ID3D11ShaderResourceView를 만들어 준다.
struct VertexTexture
{
D3DXVECTOR3 position;
D3DXVECTOR2 uv; // Texture Coordinate
};
ID3D11ShaderResourceView* shader_resource = nullptr;
Execute.cpp
그 후, Execute.cpp에서 ShaderResourceView를 설정해 준다.
// Create Shader Resource View
{
auto hr = D3DX11CreateShaderResourceViewFromFileA
(
graphics->GetDevice(),
"Tree.png",
nullptr,
nullptr,
&shader_resource,
nullptr
);
assert(SUCCEEDED(hr));
}
Texture.hlsl
그 후, Color.hlsl을 복하해 Texture.hlsl을 생성한 다음, 텍스쳐 자원을 세팅해 준다. Execute.cpp에서 연결한 Color.hlsl도 Texture.hlsl로 바꾸어 주어야 한다. 아래 코드에서 Tree.png는 사용자가 실제로 다운로드한 이미지 파일이다.
// t0 : 텍스쳐 자원이라는 의미의 t
Texture2D source_texture : register(t0); // 원본의 픽셀 데이터가 들어가 있음
SamplerState samp : register(s0);
// shader는 진입점을 기준으로 컴파일 하기에 하나의 파일에 PixelShaer, VertexShader 모두 작성해도 괜찮음
// 진입점 함수
// Pixel Shader : Rasterizer가 지정한 픽셀 개수만큼 호출
// Sampling : 임의의 데이터를 추출하는 것
float4 PS(PixelInput input) : SV_Target // SV_Target[n] 시멘틱으로 현재 세팅된 메인 렌더러 타겟을 사용하라고 알려준다.
{
float4 color = source_texture.Sample(samp, input.uv);
// HLSL에 clip() 함수는 인자로 받는 데이터가 0보다 작으면 해당 데이터를 폐기한다
// clip(color.a - 0.9f);
if (color.a < 0.1f)
discard;
return color;
}
더 자세한 내용이 궁금하시다면 직접 들어보시는 걸 추천드립니다!
'Game Dev > DirectX' 카테고리의 다른 글
1. 벡터의 개념과 DirectXMath 라이브러리의 벡터 (0) | 2021.11.09 |
---|---|
DirectX 11 2D 게임 프로그래밍 - 15. UV 좌표 조작과 Sampler State설정 (0) | 2021.11.04 |
DirectX 11 2D 게임 프로그래밍 - 13. Rasterizer state과 좌표계 (0) | 2021.10.31 |
DirectX 11 2D 게임 프로그래밍 - 12. 행렬 결합 : 이동과 회전 (0) | 2021.10.31 |
DirectX 11 2D 게임 프로그래밍 - 11. Constant Buffer 개념과 응용 (0) | 2021.10.31 |
Comments