프로그래밍 공부

프로그래밍 700

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

  • FSM을 응용하여 FSM의 데이터를 전부 각 함수로 구분지어 사용하는 방법이다. FSM의 이론을 일정부분 사용하면서, 캐릭터, NPC 몬스터 등의 동작을 별도의 객체로 분리하여. 별도의 Class로 구분지어 구현하고, 상속처리하여. 다양하게 처리할 수 있는것을 목적으로 한다. 이러한 행동 객체화를 통해 FSM과 다른 장점이 생기기도 하는데, FSM와 비교한 장점 구현이 쉬워진 복잡한 행동 FSM은 내부코드의 재사용성이 생각보다 불투명하지만, 함수별로 구분지어 사용하게 되면. 해당함수를 다시 정의하고 여러 캐릭터가 동일한 이동, 공격, 점프등을 사용할 수 있다. 객체지향 다형성 활용 기본적으로 상속과 인터페이스를 응용함으로. 동일한 인터페이스를 사용하는 한, 다양한 행동을 쉽고 간단하게 교체할 수 있다. ..

  • 여러 상태(State)와 각 상태간의 전이(Transition)으로 이루어진 모델방법 이다. FSM은 객체의 행동을 여러 상태로 나누어 표현하고, 상태 간 전이에 따라 객체의 동작이 변경된다. 이러한 구분방식은 게임개발시 캐릭터의 행동, NPC의 행동, 게임 상태등을 관리하는데 좋다. FSM은 3가지 구성요소로 정의된다. 상태(State) 객체가 취할 수 있는 다양한 동작 또는 상태를 나타낸다. 예를들어. 이동, 공격, 대기 등을 말할 수 있다. 이벤트(Event) 각 상태간 전이를 일으키는 외부, 또는 내부에서 발생하는 사건 또는 조건을 말한다. 예를들어, " 이동한 후 도착 " 이벤트가 발생하면, 이동 -> 도착 으로 상태가 전이된다. 전이(Transition) 상태간의 전이를 나타내며, 특정 이벤트..

  • 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을 ..