Texture2D 데이터를 언제 GPU로 옮기는 것일까?
Constants Buffer
는 ~SetConstantBuffers()
함수로 통해서 설정하기만 하면 된다.
상수 버퍼는 프로그램 가능 셰이더 단계들에 연결하고 HLSL에 접근하는 버퍼이지만, 그 내용을 자원 뷰가 다르게 해석해야 할 여지는 없다. 따라서, 그대로 노출되는 상수버퍼는 자원 뷰를 사용할 필요가 없다.
HLSL 안에서 상수 버퍼는cbuffer
라는 키워드를 이용해서 선언하는 구조체에 대응된다.
그렇다면 Texture2D
는 어떻게 해야할까?
- SRV를 통해서 등록해서 사용해야 한다. 그럼 어디서 SRV에 등록해야할까? 해당 코드에서 볼 수 있듯이, 모델을 불러오면서
SRV
를 초기화해주는 것을 알 수 있다.if (!meshData.albedoTextureFilename.empty()) { D3D11Utils::CreateTexture( device, context, meshData.albedoTextureFilename, true, newMesh->albedoTexture, newMesh->albedoSRV); m_materialConstsCPU.useAlbedoMap = true; }
- How the SRV use?
context->PSSetShaderResources(0, UINT(resViews.size()), resViews.data());
해당 함수를 사용해서PS
에 다가SRV
를 binding해주는 것이다. - binding된 순서대로 HLSL 코드에서
Texture2D ~~ : register(t0)
과 같은 형식으로 Texture2D 데이터를 이용할 수 있다.
Texture가 깨지는 현상이 발생. 왜 그런걸까?
- 혹시나 해서 그냥
albedoColor
만 출력해보았지만, 똑같이 깨지는 현상이 발생한다. - 내가
Sampler
를 초기화 안해줘서 그런거였음...
빛의 3원색은 더해서 하얀색이 되어야하는건데..
- 왜 곱셈으로 표현할까? 해서 덧셈으로 바꿨는데 하얀색으로만 출력된다.
- 기본적으로 색표현을 0
255가 아닌 0.01.0으로 표현하기 때문에 발생하는 현상이다. - 덧셈으로 바꾸고 싶으면 귀찮지만 소수점 -> 정수 -> 소수점으로 바꾸는 과정을 취하면 될 것이다.
'Graphics' 카테고리의 다른 글
3. Directional Shadow Mapping (0) | 2024.06.21 |
---|---|
2. Depth Buffer와 안개 효과 (1) | 2024.06.14 |
[D3D11] 사각형 및 육면체 그리기 (0) | 2024.05.20 |
1. Blinn Phong 모델 (0) | 2024.05.14 |
물체 이동과 회전 using 마우스, GUI (0) | 2024.05.14 |