[DirectX11] CubeMap 적용
·
DirectX11
큐브맵으로 배경에 이미지를 씌우는 과정이다. 여기에 사용될 이미지는 HDRI 이미지를 큐브맵으로 변환해서 사용했다. HDRI 이미지는 이곳에서 구했다. https://polyhaven.com/hdris HDRIs • Poly Haven Previously known as HDRI Haven. Hundreds of free HDRI environments, ready to use for any purpose. No login required. polyhaven.com HDRI 이미지를 큐브맵으로 변환해주는곳 https://matheowis.github.io/HDRI-to-CubeMap/ HDRI to CubeMap matheowis.github.io 변환한 뒤에 6면을 따로 받으면 된다. 큐브맵 이미지는 ..
[DirectX11] chrono로 정확한 DeltaTime 구하기
·
DirectX11
DeltaTime은 프레임 렌더링이 됐을때 이전 프레임에서부터 시간이 얼마나 지났는지를 뜻한다. 1초에 60프레임이 일정하게 나오면 각 프레임 사이의 DeltaTime은 1/60 초씩으로 약 0.01667 초다. 실시간 렌더링에서는 초당 프레임이 높게 나와야하므로 DeltaTime의 값이 매우 작아지게되어 정확도가 중요해진다. 그리고 게임에서는 DeltaTime을 기준으로 작동하는 계산이 많아서 중요도가 높다. 이전 글에서 입력으로 카메라를 조작하는 내용을 다뤘는데 그 중에서 이동 속도는 DeltaTime을 곱해서 적용한다고 했다. 이렇게 하지 않으면 초당 프레임 개수에 따라 이동 속도가 달라지는 문제가 생긴다. 애초에 속도가 초당 이동거리이므로 일정한 이동 속도를 위해서는 DeltaTime이 꼭 필요하..
[DirectX11] 1인칭 카메라 조작
·
DirectX11
다이렉트x에서 Direct Input으로 1인칭 카메라 회전과 이동이 가능하게 구현했다. 참고한 곳은 https://www.rastertek.com/dx11win10tut16.html Tutorial 16: Direct Input Tutorial 16: Direct Input This tutorial will cover using Direct Input in DirectX 11. The code in this tutorial will be based on the previous tutorial code. Direct Input is the high-speed method of interfacing with input devices that the DirectX API provide www.rasterte..
[DirectX11] 쉐도우 맵과 PCF(Percentage Closer Filtering)
·
DirectX11
이전 글의 결과물을 보면 그림자가 없어서 어색하기도 하지만, 물체가 바닥과 얼마나 떨어져있는지 구분이 안되기도 한다. 실제로는 바닥에 닿아있는 상태지만 떠있는듯이 보이는 문제가 있다.그림자를 추가하면 더 자연스러워질 것이다. 그림자를 그리기 위해서 쉐도우 매핑을 한다.이론에 대해서는 자세하게 알려주는 글이 많으니 자세히 다루지는 않겠다.간단하게 적으면 카메라 시점에서 렌더링 하기 전에 조명 시점에서 모든 물체를 렌더링하고 깊이 정보를 저장한다.그 다음에 카메라 시점에서 렌더링 할 때 조명시점에서의 깊이 정보를 사용해서 그림자가 진 영역인지 아닌지를 판단한다.카메라 시점에서 렌더링할때 대상의 월드 좌표를 알 수 있고, 이 월드 좌표에서부터 조명까지의 거리도 알 수 있다.만약 이 조명까지의 거리가 ..
[DirectX11] 텍스쳐와 노멀매핑
·
DirectX11
모델에 텍스쳐를 적용하는 과정이다. 필요한 것 텍스쳐를 저장할 쉐이더 리소스 뷰 (ID3D11ShaderResourceView) 텍스쳐에서 값을 읽을 방식을 결정하는 샘플러 (ID3D11SamplerState) GPU에서 텍스쳐를 받을 Texture2D 타입 변수 GPU에서 텍스쳐를 읽을 방식을 지정받을 SamplerState 타입 변수 텍스쳐를 읽을때에는 DirectXTK의 CreateTextureFromFile함수를 사용한다. DirectXTK: https://github.com/microsoft/DirectXTK/tree/main GitHub - microsoft/DirectXTK: The DirectX Tool Kit (aka DirectXTK) is a collection of helper cl..
[DirectX11] DrawIndexedInstanced로 여러개의 인스턴스 그리기
·
DirectX11
여러개의 동일한 모델을 그려야 하는 경우 DrawIndexed를 여러번 호출하는 대신 DrawIndexedInstanced를 사용하면 한번의 드로우 콜으로 여러개의 모델을 그릴 수 있다. 각 인스턴스들의 정보를 배열의 형태로 버퍼를 통해 전달하면 DrawIndexedInstanced에 지정한 횟수만큼 배열의 인덱스를 늘리면서 각 인스턴스의 정보에 맞게 그린다. 필요한 것은 다음과 같다. 인스턴스의 정보를 담을 구조체 인스턴스의 정보를 GPU로 보내줄 버퍼 인스턴스용 버텍스 쉐이더 또는 픽셀 쉐이더 인스턴스의 정보는 간단하게 월드 변환 매트릭스만 전달하겠다. struct InstanceInfo { XMMATRIX mInstanceToWorld; }; // ... int g_InstanceNum = 2; I..
[DirectX11] obj 파일로 모델 임포트
·
DirectX11
만들어져있는 모델을 넣기 위해서 obj파일을 읽어서 정점 정보를 처리하는 클래스를 만들었다. Assimp도 써봤는데 내가 사용하려는 모델이 블렌더에서 익스포트한 모델이어서 설정이 잘못된건지 제대로 임포트하지 못했다. face의 경우 CCW를 CW로 바꿔주는 플래그 등 오른손 좌표계를 왼손 좌표계로 바꿔주는 플래그를 지정해줘도 삼각형이 제대로 만들어지지 않거나 원하는 형태로 임포트되지 않았다. Assimp의 문제가 아니라 사용자의 문제일 것이다. 블렌더의 Export 옵션에 Forward Axis와 Up Axis가 있는데 기본 설정은 저렇다. 해당 옵션이 무엇을 기준으로 Forward이고 Up인지 검색해봐도 명확하게 알려주는 글을 찾을 수 없었다. (해당 모델을 사용하는 곳 기준으로 정해주면 되는 듯 하지..