Riley-Engine

·Riley-Engine
물체의 이동, 크기, 회전을 적용함에 따라 AABB가 이에 맞게 변환하는 것을 구현할 생각이다. AABB는 center와 extents를 통해서 구성되는데, center에서 경계면까지의 거리를 extents라고 한다. AABB는 Axis-Aligned Bounding Box라는 이름에 맞게 기저 축에 정렬된 충돌 박스이다. 따라서 물체가 회전하게 된다면, AABB는 회전을 하는 것이 아닌 회전에 맞게 크기가 변화된다. 이 부분에서 예상치 못한 문제점이 발생한다.inline void XM_CALLCONV BoundingBox::Transform(BoundingBox& Out, FXMMATRIX M) const noexcept{ // Load center and extents. XMVECTOR v..
·Riley-Engine
AABB(Axis Aligned Bounding Box)축 정렬 경계 상자라고 직역이 가능하지만, 보통 AABB라고 부른다. 그렇다면 해당 상자를 어떻게 만드는지에 대해 의문일 것이다.필요한 재료는 두 가지이다.$c$ : 상자의 중점(center)$e$ : 중점에서 각 면까지의 거리들(extents)$$c = 0.5(v_{min}+v_{max})\tag{1}$$$$e = 0.5(v_{max}-v_{min})\tag{2}$$두 값을 구하기 위해서는 우리는 $v_{min}$ 과 $v_{max}$ 를 알아야한다. 기본적으로 물체를 만들 때 vertex 값을 이용해서 물체를 만들게 된다. 이것을 이용해서 AABB의 상자를 만들 수 있다. 물체를 그리는 공간은 3차원 공간(x, y, z)으로 이루져 있다. 따라서..
·Riley-Engine
해당 값 오류는 두 번째 Render()를 할 때 발생하였다. Viewport를 설정할 때 발생한 오류로 파악되었다. 왜 두번째 Render()를 할 때 발생하였는지도 알 수 있었다.engine->SetSceneViewportData(sceneViewportData);engine->Run();engine->GetCamera()->SetAspectRatio(sceneViewportData.GetWidth() / sceneViewportData.GetHeight());engine->GetBackbufferRTV()->Clear(engine->GetDeviceContext(), clearDarkBlue);내 코드에서 engine->Run()을 하고나서..
·Riley-Engine
shadow mapping을 위해 DSV resource를 SRV에 바인딩하여 작업을 진행하였다. 다만 문제가 발생한 부분은 물체의 깊이 값을 비교할 때 발생하였다. Shadow Mapping을 통하여 그림자를 그리는 원리는 단순한다.1. Shadow Viewport로 설정하여 Shadow Mapping을 위한 '조명' 시점의 Depth Map을 그린다.2. 그린 Depth Map을 Lighting HLSL에 연결한다.3. 가져온 [1] Depth Map의 깊이값과 [2] 현재 Lighting을 그리고 있는 물체의 '조명' 시점에서의 깊이 값을 비교한다.4. 만약, 현재 그리고 있는 물체의 '조명' 시점의 깊이 값이 클 경우 그림자를 인식한다. 이것은 Depth Map을 그릴때 조명이 물체 뒤에 가려진 ..
·Riley-Engine
참고https://github.com/SanderMertens/ecs-faq?tab=readme-ov-fileECS에 대한 기본 지식ECS는 OOP와 어떻게 다른가?OOP에서 가장 중요한 것은 Inheritance(상속)인 반면, ECS에서 가장 중요한 것은 Composiotion(구성)이다.OOP는 데이터의 캡슐화를 추구하고 ECS는 POD(plain old data) 객체를 보여주는 것을 추구한다.OOP는 behavior와 함께 데이터를 같이 두는 것을 중시하고 ECS는 behavior로부터 데이터를 분리하는 것을 중시한다.OOP 객체 인스턴스는 단일 정적 타입이지만, ECS의 entities는 다중 타입을 가지며, dynamic하게 변화하는 components를 가질 수 있다.ECS와 Entity-..
·Riley-Engine
m_swapChain->ResizeBuffers(0, m_width, m_height, DXGI_FORMAT_UNKNOWN, 0);윈도우 화면을 반응형으로 구현하기 backBuffer의 사이즈를 그에 맞게 바꾸기 위해 ResizeBuffers 함수를 이용하였다. 다만 해당 함수를 통해 RTV를 생성한 결과 처음 설정한 사이즈와 똑같은 사이즈를 출력함으로써 문제가 발생하였다. 해당 문제로 인해 DepthStencilView의 사이즈와 RenderTargetView의 사이즈가 달라서, 윈도우 창 크기 변경 시 화면이 정상적으로 출력되지 않는 오류가 발생하였던 것이다.ID3D11Texture2D* backBuffer = nullptr;ID3D11RenderTargetView* rtv = nullptr;HR(m..
·Riley-Engine
Vertex Shader는 정상작동하는 것을 확인할 수 있지만, pixel shader는 did not run이라는 문구와 함께 디버깅도 하지 못하는 경우가 있을 것이다. 이는 프로그램 자체에서 쉐이더가 돌아갈 필요가 없다고 판단하여 작동하지 않는 경우이다. 대표적으로 몇가지 케이스가 있다.1. early depth test2. 완전 엉뚱한데 그리는 경우 1. depth 값이 카메라에 잡히지 않는 곳에 있으면서 생기는 문제이다. 이는 pixel shader에서 SV_DEPTH를 통해 값을 억지로 부여해서 확인해 보는 방법도 있다. 2. 내가 경험한 경우는 2번 케이스였다. 쉐이더로 보내는 cbuffer 값들이 전혀 설정이 되지 않아 IA에서는 모양이 제대로 잡혔지만, VS에서 값을 변환하면서 아에 사라져..
Koala Jung
'Riley-Engine' 카테고리의 글 목록