전체 글177 89_빌보드 #2_눈 내리기 눈 내리는 걸 해볼 것이다. 풀깔기를 응용해서 하면 된다. 1. SnowBillboard 클래스 만들기 Billboard 클래스를 복붙해서 이름을 SnowBillboard라고 한다. Engine/06. UI & Effect 필터에 넣는다. 이건 나중에 파티클 시스템에 통합이 되어야 한다. 보통은 하드코딩 해서 클래스 늘리는 방식으로 안 하긴 하지만 강의 측면에서 파티클 시스템 전단계로 해본다. SnowBillboard에 맞게 수정을 한다. 인위적으로 몇 개를 넣어서 위치를 지정하는 개념이 아니라 구역을 하나 지정해서 그 구역에서 원하는 카운트 만큼을 눈 송이 같은 걸 뿌려주면서 작업을 할 예정이다. 보통은 파티클 시스템에서 몇 개를 뿌릴 것인지 같은 옵션이 분명 있을 것이어서 거기서 작업을 한다고 볼 수.. DirectX 2024. 4. 3. 88_빌보드 #1_풀심기 개념은 쉬운데 응용해서 할 수 있는게 많다. 물체가 있다고 했을 때 ui도 종류가 많다. 인게임에 배치되어 있는 ui인데 표지판처럼 나타나는 경우도 있다. 물체가 플레이어를 바라보는 것을 빌보드라고 한다. 스크립트를 붙여서 업데이트를 할 때 마다 플레이어를 바라보게 rotation을 수정하면 된다. 간단한 물체 하나만 있으면 그렇게 해도 된다. 하지만 물체가 여러개라면 어떻게 해야할까? 1. 하나의 Quad에 빌보드 적용하기 1) BillboardDemo클래스 만들고 Quad를 하나 그리기 ButtonDemo를 복붙해서 이름을 BillboardDemo라고 한다. Client/Game 필터에 넣는다. 코드를 수정한다. 쉐이더도 나중엔 새로 파줘야 한다. BillboardDemo::Init의 UICamera.. DirectX 2024. 4. 3. 87_Button 실습 버튼을 클릭했을 때 눌리는 걸 어떻게 할지 고민한다. 유니티에서 UI를 사용할 때 EventSystem을 실수로 삭제하면 클릭해도 먹통이 된다. EventSystem 오브젝트에 붙어있는 Event System, Standalone Input Module 이 아이가 실질적으로 UI를 클릭할 수 있게 만들어준다고 보면 된다. collision box를 만들어 레이캐스팅으로 레이저를 쏘는 것도 방법이고, 버튼의 영역을 체크해서 하는게 효율적이긴하다. Screen 좌표로 영역에 포함이 되었는지 체크하는 방식으로 해본다. 포폴 만들 때 필요한 기능은 raycasting, 충돌, 애니메이션, mesh 로드해서 material을 입히는 거 등이 있으면 게임이 만들어진다. 그걸 아는 상태에서 유니티, 언리얼을 공부하면.. DirectX 2024. 4. 1. 86_직교투영 UI를 하기 앞서 카메라의 특성에 대해 알아본다. 유니티에서 카메라의 옵션 중 Projection을 Perspective에서 Orthographic 카메라로 바꾸면 절두체가 가두리 양식장이 아닌 직사각형 모양이 된다. 어떤 물체가 깊이 있건 가까이 있건 상관없이 동일한 크기로 화면에 나온다. 원근법을 무시하고 정확한 크기로 유지할 때 유용한다. 전체 화면을 찍고 오려붙이는 개념이다. 이전에 텍스쳐나 붙여서 하는 방식에서 그려지는 물체들은 쉐이더를 통해서 결정이 되는 게 문제다. 다양한 방법이 있지만 물체를 만든다음에 무조건 near에 붙이는 것도 방식이 될 수 있고, 유니티에서는 UI를 만들면 제3의 공간에 만들어진다. 카메라가 여러개가 되면 된다. 별도의 UI쉐이더를 만들고 카메라 신경 쓰지 않고 무조.. DirectX 2024. 3. 31. 85_Raycasting(수학) 1. Sphere, Box, Plane에 대한 Raycast 코드 추가하기 레이저 쏴서 레이저 피격을 맞추는 거에 대해 다뤄 본다. Raycast Sphere Raycast Axis Aligned Bounding Box Raycast Oriented Bounding Box(생략) Raycast plane 핵심 4개만 추렸다. 이걸 이용해서 여러 개를 만들어서 최종적으로 거리 계산을 통해서 구하는 식으로 해 볼 것이다. //------------------- // Raycast //------------------- static bool Raycast(const Sphere3D& sphere, const Ray3D& ray, OUT float& distance); static bool Raycast(con.. DirectX 2024. 3. 31. 84_Intersection (수학) 여러 도형끼리 포개질 때 탐지해 내기 위해서 Intersection 이란 걸 하게 되는데 여러 타입에 대해 알아본다. Sphere to sphere Sphere to AABB Sphere to OBB Sphere to plane AABB to AABB AABB to OBB AABB to plane OBB to OBB OBB to plane plane to plane 물리 엔진을 직접 구현한다면 중요한 내용이다. MathUtils클래스에 이어서 코드를 넣어준다. Sparating axis theorem을 검색해서 친절하게 분석한 글을 읽어본다. 1. MathUtils.h에 Intersection 관련 코드 추가하기 Primitive3D.h에 가서 struct Interval3D { float min; fl.. DirectX 2024. 3. 31. 83_Point Test (수학) Point test라 해서 각각의 물체에 대해서 어떠한 점이 포함이 되어 있는지 여부를 체크하는 걸 진행한다. 1. MathUtils 클래스 만들기 Engine/99. Headers/Math필터에 MathUtils라는 클래스를 추가한다. Point contained in sphere Point contained in AABB Point contained in OBB Point on surface of plane Point on line segment Point on ray 이걸 체크할 것이다. 응용 범위가 넓고 기본이 되는 내용이다. SimpleMath를 굳이 다 구현하는 건 쉽지 않다. 하지만 SimpleMath 코드를 봐도 이해가 안가는 경우가 있기 때문에 한번씩은 구현해보는 연습을 해야 한다. 그걸.. DirectX 2024. 3. 30. 82_기본 도형 (수학) 라이브러리를 이용해서 추가해 놓은 수학들에 대해 알아본다. 1. Primitive3D 클래스에 필수 기하학적인 도형들을 메모리 상에 표현하기 Engine/99. Headers 필터에 Math 필터를 추가한다. 거기에 Primitive3D라는 클래스를 생성한다. 3D 기본 도형을 묘사하는 것부터 알아본다. Point Line Ray Sphere AABB(Axis Aligned Bounding Box) OBB(Oriented Bounding Box) Plane Triangle 이 핵심이다. 어떤 데이터로 표현할 수 있는가를 묻고 있는 것이다. Primitive3D.h에 #pragma once // **************** // Point3D // **************** using Point3D .. DirectX 2024. 3. 30. 81_Terrain Picking 일반적인 물체 말고 땅을 깔았을 때 어떻게 해야할까? Terrain 처럼 굉장히 큰 Grid를 깔아주는 경우가 있다. 땅을 찍었을 때 raycasting이 되어가지고, 클릭한 쪽으로 움직인다거나 이런 것도 만약에 언젠가 만들고 싶다 라고 하면 그것도 raycasting과 관련된 부분을 넣어줘야 한다. 그걸 어떻게 할까. 1. CollisionDemo::Init에 Terrain 만들기 Terrain을 사용하고 싶으면 Mesh를 만들 때 일반적인 메쉬로 만드는게 아니라 Grid 방식으로 만들어야 한다. CollisionDemo::Init에서 // Terrain { auto obj = make_shared(); obj->GetOrAddTransform()->SetLocalPosition(Vec3(0.f)); .. DirectX 2024. 3. 29. 80_Picking 나머지 부분들을 넣어보고 물체끼리 충돌했을 때 판정해서 일어나는 것까지 넣어본다. 다음 순서 obb, aabb라는 게 생긴다. 기본적으로 둘 다 박스 collider다. aabb는 world에서 제공하는 축이랑 박스의 축이 일치할 때다. 연산하기가 쉽다. 축이 틀어져서 비스듬이 있는걸 obb라고 한다. 성능을 따질 것인지 미세한 판정을 따질 것인지 정해야 한다. 성능은 포기하더라도 리얼리티를 살리려면 obb를 사용하고, 그게 아니면 aabb를 사용한다. 1. BaseCollider를 상속한 AABBBoxCollider클래스와 OBBBoxCollider클래스 만들기 만드는 거에서는 obb를 일반적이라 생각하면 된다. Engine/04. Component/Collision 필터에 BaseCollider를 상.. DirectX 2024. 3. 28. 79_Sphere Collider ray casting을 하거라 물체들끼리 충돌을 하거나 두가지 상황이 있을건데 두 가지 상황 다 Collision 이란 개념이 들어가야 한다. 1. CollisionDemo 클래스 만들기 Client/Game필터에 Week3 필터를 만든다. ViewportDemo 클래스를 복붙해서 이름을 CollisionDemo 라고 한다. CollisionDemo::Update의 코드를 삭제한다. 코드를 수정하고 Main에 세팅한다. 2. BaseCollider, SphereCollider 클래스 만들기 Engine/04. Component 필터에 Collision 필터를 만든다. 그 안에 BaseCollider 라는 클래스를 만든다. 조상님이 될 아이다. 이거를 상속해서 여러개의 충돌 박스를 만들어 줄 것이다. 구형.. DirectX 2024. 3. 28. 78_Viewport 로컬→월드→ViewSpace→Projection→NDC(normalized device coordinates)→Viewport 화면의 중앙을 클릭하면 카메라 위치에서 화면 중앙까지 가는 레이저를 쏘고 그 레이저가 어떤 애를 피격하면 어떤 물체를 클릭했다고 인지하는 것이다. 클릭한 것은 2D화면을 클릭했지만 3D 물체를 선택하게 된 것은 레이저로 쏴 가지고 맞췄다는 얘기가 된다. 레일저를 쏘는게 꼭 2D에서 3D를 쏘는 데만 쓰이는게 아니라 움직일 때 충돌 판정하는데 이용하거나 앞 방향으로 레이저르 쏴서 앞에 뭐가 있으면 멈추게 하는 식으로 응용할 수 있다. 레이저를 쏘려면 2D화면을 3D화면으로 바꿀 수 있어야 한다. 2D에서 3D로 갈 때 깊이가 중요하다. 깊이라는 추가 정보를 줄 필요가 있다. 2D좌.. DirectX 2024. 3. 27. 이전 1 2 3 4 ··· 15 다음