2024/09 13

게임을 위한 자료구조 - 빠른 순회, 빠른 삽입, 빠른 삭제, 빠른 탐색

GameObjectManager (가칭)전체 순회, 삽입, 삭제, 탐색 속도가 매우 빠른 컨테이너입니다.제목은 GameObjectManager 라고 지었는데, GameObject를 관리하기 위한 컨테이너 쯤으로 불러도 괜찮습니다.이름에서 볼 수 있듯 게임 오브젝트를 관리하기 위해서 만든 특별한 자료구조입니다.게임에서 가장 빈번히 일어나는 작업 중 하나는 컨터이너의 순회입니다. 보통 게임 오브젝트들은 매 틱마다 자신의 고유의 일을 수행하기 위해 Update 혹은 Tick 이라는 함수를 수행합니다. 그러기 위해서는 컨테이너에 수많은 오브젝트들을 저장하여 전체 순회를 통해서 상태를 갱신하는 설게를 사용할 수 있습니다. 그러므로 컨테이너의 순회는 1초에 최소 60번은 발생하며, 순회의 속도는 게임의 성능을 판가..

게임을 위한 자료구조) 빠른 순회, 빠른 탐색, 빠른 삭제, 빠른 삽입 설계도

1. 오브젝트는 이중으로 관리 1) 빠른 삽입, 삭제, 탐색을 위한 해쉬 테이블 2) 빠른 순회를 위한 오브젝트 벡터, 빠른 삭제를 위해 특수한 형태의 벡터를 사용함 2. 해쉬 테이블 키 : 오브젝트의 ID (ID는 uint64 이며 유일하다.) 값 : std::pair (배열의 인덱스, 오브젝트의 unique_ptr) 3. 벡터 단순한 일자형 벡터 캐쉬 히트가 높아서 순회속도가 빠르다. 4. 탐색 해쉬 테이블을 통한 탐색 5. 삽입 해쉬 테이블을 통한 삽입 -> O(1) 배열에 추가적으로 삽입하고 배열의 인덱스를 해쉬 테이블에 업데이트 -> O(1) 이 때 push_back을 사용하면 안됨 벡터의 맨 뒤 인덱스를 얻어냄 해당 인덱스의 요소가 nullptr면 대입 해당 인덱스의 요소가 nullptr가 아..

[DX11 물방울책 요약 정리] Direct3D에서 그리기

주의책이랑 다른 내용이 굉장히 많습니다.현대 DX와 책과 다른 부분이 많고.. 책에는 설명이 난해하게 된 부분이 있어서 의역이 다수 존재합니다. 이전 챕터에서는 주로 렌더링 파이프라인의 개념적 및 수학적 측면에 초점을 맞췄다. 이번 챕터에스는 Direct3D 인터페이스와 메서드를 사용하여 렌더링 파이프라인을 구성하고버텍스 쉐이더, 픽셀 쉐이더를 정의하고, 기하 데이터를 렌더링 파이프라인에 제출하여 그리는 바법에 중점을 둔다. 이 챕터를 끝내면, 색상 또는 와이어프레임 모드로 다양한 기하학적 도형을 그릴 수 있게 될 것이다. Vertices와 입력 레이아웃Driect3D의 버텍스는 위치 외에도 추가 데이터를 포함할 수 있다.사용자 정의 버텍스를 위해서는 먼저 우리가 선택한 버텍스 데이터를 포함하는 구조체를..

카테고리 없음 2024.09.20

[DX11 물방울책 요약 정리] 챕터5: 렌더링 파이프라인

이 장의 주요 주제는 렌더링 파이프라인이다. 가상 카메라가 배치되고 방향이 설명된 3d 장면의 기하학적 설명을 바탕으로,렌더링 파이프라인은 카메라가 보는 것을 기반으로 2D 이미지를 생성하는 일련의 과정 전체를 의미한다. 말이 어려울 수도 있는데.. 월드에 3D 기하학들이 정해져 있고, 카메라는 특정 공간을 미추고 있다.3D 기하학 정보들을 적절하게 해석하여 뷰포트에 2D 형태로 이미지를 생성하는 과정을 렌더링 파이프라인이라고 한다. 외 그림에서 왼쪽이미지는 카메라가 위치하고 조준된 3D 월드의 객체들의 측면 뷰를 보여준다.가운데 이미지는 같은 장면을 위에서 내려다본 모습이다.카메라의 시야 (피라미드 모양, 혹은 절두체라고 부름) 은 볼 수 있는 공간의 부피 (가시부피)를 나타내며, 해당 공간 외부에 있..

좌표계 변환에 대한 삽질

좌표계 변환에 대해서 잘 이해하지 못해서 다시 제대로 공부한 뒤 그 기록을 남긴다.개인적으로 아핀변환이 더 직관적으로 이해된다고 생각하기 때문에..좌표계 변환을 아핀 변환과 조금 섞어서 다시 표현해보도록 하겠다.좌표계 변환 Change Of Coordinate Transformations좌표계에는 여러 종류가 있다.자신의 좌표계는 로컬 좌표계라고 하며자신을 정의하는 좌표계도 존재할 수 있으므로 그러한 좌표계를 부모 좌표계이런 식의 상속구조가 재귀적으로 정의될 수 있다. 물론 하나의 부모에서 여러 자식 좌표계가 존재할 수도 있다. 그러나 자식은 자신의 좌표계에서는 자기가 마치 표준 기저인 양 점들을 정의할 것이다. 로컬 좌표계만 가지고는 월드를 렌더링할 수가 없다.결국 월드를 기준으로하는 모든 로컬좌표계를..

[DX11 물방울책 요약 정리] 챕터4: Direct3D 초기화

파트2: Direct3D 살펴보기이 부분에서는 이 책의 나머지 부분에서 사용되는 Direct3D의 기본 개념과 기법들을 학습한다.이 기초들을 숙달하면 더 흥미로운 응용 프로그램을 작성할 수 있다.이 부분에 포함된 각 장의 간단한 설명은 다음과 같다. 챕터 4: Direct3D 초기화이 장에서는 Direct3D가 무엇인지, 그리고 3D 그리기를 준비하기 위해 어떻게 초기화하는 지 배운다.serface, pixel format, page fliping, depth buffer, multi sampling 과 같은 기본 Direct3D 주제들도 소개된다. 또한 성능 카운터를 사용해 초당 렌더링된 프레임 수를 계산하는 방법도 배우며, Driect3D 애플리케이션을 디버깅하는 몇 가지 팁도 제공한다. 우리는 SD..

[DX11 물방울책 요약 정리] 챕터3: Transformations

변환 Transformation우리는 3D 세계에서 객체를 기하학적으로 표현한다. (객체의 표면을 삼각형들의 집합으로 근사하는 방법을 사용) 객체가 움직이지 않는다면 세계는 흥미롭지 않을 것이다. 따라서 우리는 기하학을 변환하는 방법에 관심을 갖는다. 기하학적 변환의 예로는 이동, 회전, 크기변환이 있다. 이 장에서는 3D 공간에서 점과 벡터를 변환하는 데 사용할 수 있는 행렬 방정식을 개발한다. 학습 목표1. 선형 변환과 아핀 변환이 행렬로 어떻게 표현될 수 있는지 이해한다.2. 기하학적으로 객체의 크기, 회전, 이동을 위한 좌표 변환을 배운다.3. 여러 변환 행렬이 행렬 곱셈을 통해 하나의 최종 변환 행렬로 결합될 수 있음을 알아본다.4. 한 좌표계에서 다른 좌표계로 좌표를 변환하는 방법과 이 변환이..

[DX11 물방울책 요약 정리] 챕터2: 행렬 대수

챕터2: 행렬대수컴퓨터 그래픽스에서 우리는 행렬을 사용하여 크기 변환, 회전 변환, 이동 변환과 같은 기하학적 변환을 간결하게 설명하고, 또한 한 프레임에서 다른 프레임으로 점 또는 벡터의 좌표를 변경한다. 목표:1. 행렬과 행렬에서 정의된 연산에 대해 이해한다.2. 벡터와 행렬 곱셈이 어떻게 선형 결합으로 해석될 수 있는지 알아본다.3. 항등 행렬, 전치, 행렬식, 역행렬이 무엇인지 배운다.4. 행렬 수학을 위해 사용되는 XNA 라이브러리를 학습한다. 정의m x n 행렬은 m 행, n 열로 구성된 실수들의 직사각형 배열을 의미한다.행과 열의 곱은 행렬의 차원을 나타낸다. 행렬 내의 숫자들은 요소, 원소 등으로 불린다. 우리는 이중 첨자 표기법을 사용하여 요소가 속한 행과 열을 지정할 수 있다.  1.A..