프로그래밍 공부

서울게임아카데미 교육과정 6개월 국비과정 113

카테고리 설명
  • AnimationInstancing에서 각 객체에 애니메이션을 분할적용하고, 원하는 애니메이션을 원하는 객체에 실행하도록 바꾸어보자. 우선. Instancing을 사용해서 데이터를 조절함으로 Buffer한개로 같은 객체 100개를 조절하는것을 알 수 있다. 그럼으로, ObjectMaster를 한개 두고. 해당 객체를 사용해서 나머지 객체의 행동사항을 조절해야함을 이해할 수 있을것이다. 한번 작업해보자. // MonsterManager 클래스는 Singleton 패턴을 따르며 게임 내 몬스터를 관리하는 역할을 수행합니다. class MonsterManager : public Singleton { private: // 몬스터 풀의 크기를 나타내는 상수 const UINT POOL_SIZE = 100; // ..

  • Q1. Vector3형태의 Obejct A와 B 두개가 주어졌을 때, B가 A를 바라보게 만들려면 어떠한 방법을 따라야 하는가. A1. A->B를 구한다. B의 Forward를 찾는다. A->B와 B.Forward()간의 Dot을 구한다. atan(Dot(A->B, B.Forward()))하여. 각도를 구한뒤에, B의 각도를 결과값에 보정한다. Q2. 2D평면상의 Vector2형태의 Obejct A와 B가 존재할 때, A는 사각형, B는 원이다. 두 객체간 충돌을 검사하기 위한 과정은 어떻게 구성되는가? A2. A의 각 꼭짓점을 찾는다. Rect(A) 형태의 사각형일 경우, APos(x, y)에서 사각형의 높이 길이 = Size(xA, yA)일 때. 좌측하단 : Lw(x - xA * 0.5, y - yA..

  • Object와 Player간의 상호작용을 사용해보자. Animation은, 각 객체간 다른 Animation이 적용되어야 하고. Collision작업은 각 객체가 다른 Collision을 적용해야한다. 그러나, Render작업은 Buffer에 한번에 데이터를 전달하고 작업해야한다. MonsterManager를 생성하고, 해당 전역객체를 사용해서 몬스터를 생성하고 움직이게 관리해보자. 각 객체는 쉽게 말하자면 하이브마인드 와 비슷하게. 중앙관리체계로 동작해야 한다. 이러한 방식은 FSM이론과 행동 객체화 방식을 따르는것 이 편하고 좋다. MonsterManager #pragma once // MonsterManager 클래스는 Singleton 패턴을 따르며 게임 내 몬스터를 관리하는 역할을 수행합니다. ..

  • AnimationInstancing객체를 사용해서 응용해보자. 인스턴싱 작업을 위해 Buffer에 데이터 범위를 설정하고. 해당 범위값에 대한 데이터를 활용해서 데이터를 넘겨주는 작업을 진행한다. // FireBallManager 클래스의 생성자 FireBallManager::FireBallManager() { // ModelInstancing을 생성하고 이름을 설정합니다. modelInstancing = new ModelInstancing("FireBall"); // 첫 번째 메시에 대한 블렌드 스테이트를 추가적으로 설정합니다. modelInstancing->GetMesh(0)->GetBlendState()->Additive(); // 첫 번째 메시에 대한 래스터라이저 스테이트를 양면 시점으로 설정합니..

  • 일반적인 인스턴싱과 다르게 AnimationInstancing은 조금 다른 데이터를 더 주어야 한다. 위치 Matrix의 값과 Animation의 객체값을 따로 넣어야 한다. 먼저 HLSL을 새로 만들어준다. ModelAnimationInstancing.hlsl을 만든다. struct VertexInstancing { float4 pos : POSITION; float2 uv : UV; float3 normal : NORMAL; float3 tangent : TANGENT; float4 indices : BLENDINDICES; // 특정 본들, 본에 꼽혀있을 때, 어떤 본에 가중치를 줄 것인지 웨이트가 들어감. float4 weights : BLENDWEIGHTS; matrix transform : I..

  • Instancing 인스턴싱은, 최적화 기법중 하나로 동일 객체나 요소를 여러번 그리는 작업을 최적화 하기 위한 기술이다. 동일한 메시를 그릴 때 여러번 DrawCall 을 할 필요 없이 한번만 DrawCall 을 한 뒤, 같은 모델을 여러번 배치하는 형태로 이루어진다. 한번 생성된 데이터는 다시 날릴 필요 없이. 그 횟수동안 받아온 위치정보만 대입하여 그려주면 되기 때문에 여러번 데이터버퍼를 받아올 필요가 없기 때문이다. 이는 DrawCall 이 데이터를 Device에서 DeviceContext에서 넘기는 과정에서 생기는 Bus Latency나 Moemory Latency가 쌓이면 엄청난 시간적 손해가 발생하기 때문이다. 그래서 DrawCall 은 리소스를 많이 쓰는 작업이고 이러한 DrawCall을 ..