개인공부/Direct2D(10)
-
RGB Transition
RGB 분리 가장 먼저 원본 bitmap에서 RGB값들을 각각 분리했다. 각각의 추출할 색깔을 정해서 ID2D1Bitmap 객체로 생성하였다. 생성하는 과정에서 어제 공부한 unique_ptr을 사용해 보고싶었는데 ID2D1 객체의 경우 COM 객체쪽으로 Release를 따로 호출해서 해제하는 형식이기 때문에 ComPtr을 사용해서 따로 스마트포인터를 사용해야 했기 때문에 나중에 공부해서 사용 할 예정이다. 게임을 진행할때 런타임에 비트맵을 새로만들고 해제하는건 비효율적이므로 나중에 비트맵을 저장해서 쓰는 방법으로 코드를 바꿀 예정이다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3..
2023.07.28 -
D2D 이펙트 공부
일단은 크로마키 이펙트를 사용해서 만들었다.... 하지만 원래의 의도는 명도에 따라서 작업을 진행하고 싶었는데 아무리 찾아도 Effect에서 명도에 따라서 투명하게 만들어주는 함수가 없는거 같아서 내가 직접 만들어주지 않고는 힘들어 보인다. 그래도 최대한 크로마키를 사용해서 만들었는데 일단 크로마키 이펙트의 보정값에 대한 계산식이 나와있지 않아서 정확한 계산은 하지 못했다...
2023.07.26 -
Direct2D Effect 응용
BloomEffect 최근에 그래픽스 엔진쪽에서 추가하면 좋을 기능등에서 고민을 많이하고 있었는데 수업시간에 교수님께서 가우시안 블러를 응용하는 방법들에 대해서 말씀해 주셨는데 정말 많은 도움이 되었다. 가우시안 블러만으로는 무언가를 표현하기에는 예쁘지 않았는데 배운것을 응용했는데 예쁘게 나와서 만족했다. 아래는 구현 코드인데 아직까지는 비트맵 전체를 가우시안 블러를 적용해서 하고 있는데 교수님이 설명하신 방법은 명도에서 따라서 적용하면 더 예쁘다! 였다. 그래서 명도에 대해서 공부도 해야한다. 일단은 RGB 값으로 V(명도)를 구할 수 있으므로 D2D Effect 중에서 특정 명도값 아래는 모두 투명처리를 하고 남아있는 곳만 가우시안 블러를 처리해서 원본과 블랜딩하면 될꺼같은데 잘 찾아봐야겠다. ㅁ 1..
2023.07.25 -
스타크래프트 기능 구현 3
구현내용 1. 체력 Bar 현재는 Unit 컴포넌트가 여러가지 컴포넌트를 가지고 전체적인 이벤트들을 처리하고 있다. BarUI를 예를 들면 Unit 컴포넌트가 Start 함수에서 BarUI의 주소를 받아오고 Unit의 체력이 조정될때 BarUI의 길이를 바꾸는 형식으로 구현하였다. 조정을 받은 BarUI는 자신의 정보들을 가지고 랜더링을 시작한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 void BarUI::PostRender(D2DRenderer* _d2DRenderer) { // 게임오브젝트의 위치를 가져온다 Transform* transform = GetComponent(); Vector2 position..
2023.07.16 -
스타크래프트 기능 구현 2
구현내용 간단하게 유닛의 공격, 추적 상태들을 만들어서 적용했다. 유닛의 공격범위를 벗어나면 유닛은 추적하고 공격범위 내에 있으면 공격하게 된다. 어려운 점 처음으로 게임에서의 공격 시스템을 만들고 있는데 정말로 고려해야 하는 점이 많았다. 먼저 컴포넌트로 가지는데 어떠한 구조로 설계할까부터 시작해서 유닛이 가져야 하는 정보, FSM 등 정말로 고려해야 할 점이 많다. 스타크래프로 하기를 잘한 거 같다. 무작정 코드를 작성하고 있는데 생각할 점이 많아서 도움이 되는 거 같다. 다음 목표 간단하게 유닛이 체력바를 구현하고 유닛이 공격을 받아서 유닛의 체력이 0이 되면 삭제되는 것이 다음 목표이다.
2023.07.14 -
충돌 연산 최적화
Dynamic AABB Tree 문제점 O 내가 구상하고 있는 게임은 스타크래프트 유즈맵 느낌의 디펜스 게임을 제작하기 위해서는 100개 이상의 오브젝트들이 필요했고 서로 충돌처리를 해서 시야를 감지하고 밀어내는 과정이 필요했다. O 원래 엔진의 구조 충돌연산구조는 단순 비교로 n^2의 시간복잡도를 가지고 있었다. 물론 오브젝트를 타입별로 나눠서 충돌을 체크했지만 그래도 같은 오브젝트의 개수가 100개 이상이 되면 프레임이 정말 떨어지는 문제점이 있었다. 해결방안 O N^2 Broadphase가 아닌 Dynamic AABB Treef를 적용해서 연산을 최적화하자 O CollisionManager를 N^2에서 Dynamic AABB Tree로 리팩토링 해보자 해결과정 O Dynamic AABB Tree 참..
2023.07.12