본문 바로가기

분류 전체보기

(63)
Timer DeltaTime이란?매 프레임 간 걸린 시간DeltaTime은 한 프레임에서 다음 프레임까지 걸린 시간 간격을 의미합니다.예를 들어, 60fps라면 한 프레임당 약 0.016초가 걸리며, 이 값을 이용해 속도 기반 이동을 시간에 독립적으로 처리할 수 있습니다. Timer 시스템 구현 흐름타이머는 QueryPerformanceCounter와 QueryPerformanceFrequency를 이용하여 고해상도 정밀 타이머를 구현합니다. Initialize() – CPU 타이머 설정HRESULT CTimer::Initialize(){ /* 현재 cpu카운팅한 숫자. */ QueryPerformanceCounter(&m_FrameTime); // 1077 QueryPerformanceCounter(&m_La..
3D 에서 Local Space와 World Space 변환 이해하기 3D 그래픽스의 Local Space와 World Space 변환 이해하기3D 그래픽스에서 모델링한 객체들은 모두 Local Space(로컬 좌표계)에 정의되어 있습니다. 이를 실제 게임 환경에 배치하기 위해서는 World Space(월드 좌표계)로 변환해야 합니다. 이번 포스팅에서는 Local Space에서 World Space로의 변환 과정과 그 원리에 대해 자세히 알아보겠습니다. Local Space란?Local Space는 모델 각각의 좌표 공간을 의미합니다. 모델링 툴에서 만든 객체의 정점(Vertex)들은 로컬 좌표계를 기준으로 위치가 정해져 있습니다. 이 로컬 좌표는 모델 자체에 대한 상대적인 위치를 나타내며, 아직 게임 세계에 배치된 것은 아닙니다. World Space란?World Spa..
DX9 - 카메라 목적CCamera는 게임 씬(Scene) 전체를 카메라 기준으로 변환시키기 위해, View 행렬과 Projection 행렬을 생성하고 관리하는 객체입니다. 또한, 입력에 따라 카메라를 이동하거나 회전시킬 수 있습니다. 주요 데이터m_vCameraInfo[CAMERA_END]→ 카메라의 위치(Pos), 오른쪽(Right), 위(Up), 전방(Look) 벡터를 저장하는 배열.m_CameraType→ 카메라가 땅을 걷는지(LANDOBJECT) 하늘을 나는지(AIRCRAFT) 구분.m_ViewMatrix→ 카메라의 뷰 행렬을 저장합니다.CameraType m_CameraType = { LANDOBJECT };_matrix m_ViewMatrix;_vec3 m_vCameraInfo[CAMERA_END]; 현재 ..
동차 좌표 동차 좌표 1. 동차 좌표란?일반적인 3D 좌표: (x, y, z)동차 좌표: (x, y, z, w) 형태의 4차원 벡터이때 실제 3D 공간의 점은 다음과 같이 복원함:(wx,wy,wz)즉, (x, y, z, w)는 (x/w, y/w, z/w)와 동일한 3D 위치를 나타냄(단, w ≠ 0일 때) 2. 왜 동차 좌표가 필요한가?A. 행렬 연산으로 모든 변환을 통일시키기 위해변환 종류 일반 좌표 동차 좌표에서의 처리회전행렬 곱 가능동일스케일링행렬 곱 가능동일이동 (Translation)행렬 곱 불가능행렬 곱 가능일반 좌표에서는 (x, y, z) + (dx, dy, dz)로 이동하지만,행렬만으로 이동까지 처리하려면 동차 좌표가 필요함. 즉, 동차 좌표는 모든 공간 변환을 행렬 곱으로 처리할 수 있게 해줌 B..
DX - 투영 행렬 왜 투영 행렬이 필요한가?우리가 다루는 3D 공간의 정보는 모니터라는 2D 평면에 시각적으로 표시되어야 합니다.이때 3D 공간의 점(Vertex) 들을 2D 화면으로 변환(투영) 해주는 작업이 필요합니다.이 변환을 수행하는 수학적 도구가 바로 투영 행렬(Projection Matrix) 입니다. 투영 행렬의 구조[ 1/(aspect) * scale 0 0 0 ][ 0 scale 0 0 ][ 0 0 f/(f - n) 1 ][ 0 0 -n*f/(f - ..
몬스터 행동 패턴 구현 정리 (2D) 몬스터가 여러 동작을 수행할 때 애니메이션과, 동작에 대한 상태 변경에 대해서 간단하게 작성한 글입니다. 1. 애니메이션 자료구조✅ AnimInfo애니메이션 스프라이트의 상태 정보 저장용 구조체입니다.typedef struct AnimInfo{ int iFrameStartInit = 0; // 스프라이트의 시작 프레임 int iFrameEndInit = 0; // 스프라이트의 끝 프레임 int iFrameEnd = 0; // 스프라이트 이미지의 끝 int iCurrentFrame = 0; // 현재 스프라이트의 프레임 (열 정보) int iMotion = 0; // 해당 스프라이트의 몇번째 줄을 사용할 것인지? (행 정보) float fChangeTime = 0.f; //..
함수의 호출 함수 호출.스택 프레임 구조함수 호출 과정에서 할당되는 메모리 블록을 가리켜 스택 프레임이라 합니다.  sp 레지스터스택에 데이터를 쌓거나 반환하기 위해 어느 위치까지 데이터를 저장했는지 기억해야 합니다.이를 위해서 CPU 내에 sp라는(Stack Pointer) 레지스터가 존재합니다.변수 선언시 sp가 가리키는 위치에 할당하기 때문에 sp 위치를 아래로 이동 시키는 것 만으로도 이전에 선언된 변수를 반환 가능합니다. (변수 할당 시 이전에 저장된 값들을 덮어씁니다.)시작은 sp 레지스터가 0번지.변수나 함수 호출을 할 때 마다 sp 레지스터가 해당 주소 번지에 값을 넣고 변수나 함수의 스택 프레임 크기만큼 이동합니다. (다음에 변수나 함수에 대한 주소 값을 넣어주기 위해서) sp 레지스터의 문제점스택에..
큐란?가장 처음에 들어간 데이터가 처음으로 꺼내지는 구조를 가진 자료구조 입니다. (FIFO)  큐의 ADT큐란 자료구조를 구현하기 전에 해당 자료구조의 ADT를 정의할 필요가 있습니다.1. First in First Out(FIFO) : 처음에 들어간 값이 첫 번째로 나오는 구조2. 탐색, 삽입, 삭제를 구현할 것.3. 큐의 전방, 후방을 나타내는 변수를 선언할 것.  큐의 ADT 선언큐의 ADT를 참고하여 클래스로 선언 해보겠습니다. #include "pch.h"#include using namespace std;template struct Node{ T value; Node* prevNode; Node* nextNode;};template class CustomQueue{public: Custo..
스택 스택이란?가장 마지막에 들어간 데이터가 처음으로 꺼내지는 구조를 가진 자료구조 입니다. (LIFO)가장 처음에 들어간 데이터가 가장 마지막에 꺼내지는 구조를 가진 자료구조입니다. (FILO)  스택의 ADT스택이란 자료구조를 구현하기 전에 해당 자료구조의 ADT를 정의할 필요가 있습니다.1. Last in First Out(LIFO) : 마지막에 들어간 값이 첫 번째로 나오는 구조2. 탐색, 삽입, 삭제를 구현할 것.3. stack 최상단 데이터 값을 반환하는 함수를 구현할 것.  스택 ADT 선언스택의 ADT를 참고하여 클래스로 선언 해보겠습니다.  template class CustomStack{public: CustomStack() : list(new T[10]) , pointer(-1) , ..
리스트의 종류 (링크드, 더블 링크드, 환형 링크드) 1. 링크드 리스트리스트의 자료구조를 구현 방법 중 하나입니다.일반적으로 시작 노드를 head 노드, 끝 노드를 tail 노드라고 정의합니다.  링크드 리스트의 ADT링크드 리스트의 ADT를 정의하기 위해 공통 요소와 기능을 살펴보겠습니다.요소(DATA): 개별 노드(Node), head 노드에 대한 포인터기능(FUNCTION):노드를 추가하는 연산노드를 삽입하는 연산노드를 제거하는 연산노드를 반환하는 연산 링크드 리스트의 ADT 선언링크드 리스트의 ADT를 보고 선언만 해보겠습니다.typedef int nodeData;typedef struct Node{ Node* next; NodeData nodeData; }*PNODE, NODEclass LinkedList{public: List(); ..