Programming/DirectX12
-
졸업작품 마무리 작업Programming/DirectX12 2022. 7. 25. 22:44
8월 1일에 최종 제출이기 때문에 슬슬 마무리 작업을 진행했다. 버그를 잡고 소소한 변경사항들이 있었다. '조작법' 메뉴를 추가했다. 해당 메뉴를 누르면 조작법을 알려주는 창이 나오도록 할 예정이다. 체력이 30% 이하로 떨어지면 화면 가장자리 부분이 빨개지는 효과를 추가했다. 데미지 텍스트가 커졌다가 작아지도록 변경했다. 그 외 아래와 같은 버그들을 수정했다. - 그림자 판정이 이상하던 점 수정 - 플레이어가 움직이면서 죽었을 때 죽은 상태에서도 계속 움직이던 점 수정 - 플레이어가 죽었을 때 몬스터의 외곽선이 검정색으로 보이던 점 수정 - 멀티플레이어가 피격당했을 때 피격 애니메이션이 계속 반복되던 점 수정 - 몬스터가 살아있는 사람만 타게팅하도록 수정 - 하나의 총알이 여러 마리의 몬스터를 피격시키..
-
블러링Programming/DirectX12 2022. 7. 4. 16:58
지난 게시글에서 만든 조준 기능에 블러링을 넣어보기로 했다. 구현한 기능은 조준 시에 화면 가장자리 부분이 블러링되는 것이다. 클라이언트 // filter.h class Filter abstract { public: Filter() = default; Filter(const ComPtr& device); virtual ~Filter() = default; virtual void Excute(const ComPtr& commandList, const ComPtr& postRootSignature, const ComPtr& renderTarget) = 0; protected: ComPtrm_buffer0; ComPtrm_buffer1; ComPtrm_srvUavHeap; CD3DX12_CPU_DESCRIPT..
-
줌인, 줌아웃Programming/DirectX12 2022. 7. 1. 18:27
졸업작품을 FPS게임으로 만들고 있는데 그냥 쏘기만 하니까 게임이 심심해서 줌인, 줌아웃 기능을 만들어보았다. // player.h boolm_isFocusing;// 확대 조준 중인지 boolm_isZooming;// 줌인, 줌아웃 중인지 boolm_isZoomIn;// 줌인 중인지 FLOATm_zoomTimer;// 줌 타이머 'm_isFocusing' 은 현재 플레이어가 줌인 상태인지를 나타낸다. 줌인 상태에서는 몇몇 행동을 제한하기 위해 필요하다. 'm_isZomming' 은 지금 줌인 또는 줌아웃 상태인지를 나타낸다. 이 변수가 true일 때만 줌 관련 함수가 작동한다. 'm_isZoomIn' 은 지금 줌인 중인지를 나타낸다. 위의 변수와 비슷하다고 생각할 수 있지만, 위의 변수는 줌인, 줌아웃..
-
스트림 출력을 이용한 파티클 구현Programming/DirectX12 2022. 6. 7. 13:19
게임 화면이 너무 심심해서 먼지 파티클들을 추가해보려고 했다. 파티클 또한 CPU에서 처리를 해도 되기는 하지만 그렇게 하면 성능에 문제가 생긴다. 그래서 '스트림 출력' 을 이용하여 GPU에서 관리되는 파티클 시스템을 구현했다. 스트림 출력 단계란? 기하 셰이더의 출력 결과를 메모리로 보내고 해당 데이터를 다시 정점 버퍼의 입력으로 받는 단계이다. 스트림 출력을 이용한 렌더링은 2단계에 걸쳐 진행된다. 1단계에서는 스트림 출력을 위한 렌더링을 진행하고, 2단계에서는 스트림 출력 결과를 입력으로 받아 통상적인 렌더링을 진행한다. 스트림 출력을 위한 메쉬 클래스 클래스 정의 class ParticleMesh : public Mesh { public: struct ParticleVertex { XMFLOAT..
-
외곽선 그리기 버그 수정Programming/DirectX12 2022. 5. 29. 01:47
이전 게시글에서 외곽선을 구현했는데 버그가 있었다. 그래서 제대로 작동하도록 수정했다! 처음 봤을땐 제대로 작동하는 줄 알았다. 하지만 외곽선이 설정한 두께의 2배로 적용되는 버그가 있는 상태의 사진이다. 스텐실버퍼를 이용해서 외곽선을 검출하면 주황색, 파랑색 부분 모두에서 외곽선이라고 판단하기 때문에 설정한 외곽선의 두께의 2배로 보여지는 것이였다. float4 PS(PS_INPUT input) : SV_TARGET { float width, height; g_stencil.GetDimensions(width, height); const float3 outlineColor = float3(0.1f, 0.1f, 0.1f); const float outlineThickness = 1.0f; const fl..