C++데이터와 로직함수와 디버깅포인터와 배열객체 지향동적할당과 캐스팅알고리즘과 모던 C++자료구조와 알고리즘선형 자료구조트리와 그래프STLSTL게임 수학게임수학WindowsAPIWindowsAPI 입문2D 게임 프레임워크 설계2D 포트폴리오 준비게임 서버멀티쓰레드 프로
연산을 담당하는 컴퓨터의 핵심 장치모든 데이터 처리는 CPU가 담당하고, 명령어를 실행함.특징 : 연산 속도가 매우 빠르며, 메모리로 데이터를 받아서 처리데이터를 임시로 저장하는 메모리CPU가 빠르게 접근할 수 있도록 도와줍니다.특징 : 휘발성 메모리로, 전원이 꺼지면
변수를 선언하면 메모리 공간이 할당되고, 변수 이름을 통해 이 공간을 참조하여 데이터를 저장하거나 읽을 수 있습니다.변수는 데이터를 저장하고 처리하는 가장 기본적인 프로그래밍 요소입니다.데이터를 저장, 읽기, 수정.프로그램의 가독성을 높이고 유지보수를 쉽게 만듭니다.변

정수란 정수는 소수점이 없는 수로, 양수, 음수, 0을 포함 컴퓨터는 정수를 2진수(Binary)로 변환하여 저장하고 처리 ex) 10진수 5 → 2진수 00000101 (8비트 기준) 정수의 표현 방식 부호화 크기 방식 MSB(가장 왼쪽 비트)를 부호 비트로 사용 0: 양수, 1: 음수 나머지 비트는 크기 정보 +...
변수(variable)란 데이터를 저장할 수 있는 메모리 공간입니다.변수에는 이름이 붙으며, 이 이름을 통해 값을 저장하거나 읽어올 수 있습니다.변수는 특정 데이터 타입을 가지며, 프로그램 실행 중 값이 변경될 수 있습니다.예:변수는 선언과 동시에 초기화할 수 있습니다
C++에서 산술 연산은 숫자 데이터를 처리하는 가장 기본적인 연산입니다. 여기서는 산술 연산의 개념, 연산자, 사용법, 연산자 우선순위 등을 예제와 함께 꼼꼼히 분석해보겠습니다.C++에서 지원하는 기본 산술 연산자는 아래와 같습니다.두 피연산자의 값을 더합니다.정수형,
비교 연산자는 두 값을 비교한 결과를 true 또는 false로 반환합니다. 이 결과는 조건문이나 반복문에서 자주 사용됩니다.a == b: a와 b가 같은지 비교.a = 5, b = 3, 값이 다르므로 결과는 false (출력: 0).a != b:a와 b가 다른지 비교
주제 C++의 대표적인 제어문인 if / else if / else와 switch-case에 대해 깊이 있는 분석을 제공한다. 조건문은 프로그램이 "특정 조건을 만족할 때 어떤 행동을 할 것인가"를 결정하는 가장 기본적이고 핵심적인 논리 구조이며, 실전 코딩에서도 매우 자주 사용된다. if, if-else, if-else if-else, 그리고 swit...
반복문이란: 반복문은 프로그램이 특정 작업을 조건이 충족될 때까지 또는 일정 횟수만큼 실행하게 만드는 제어 구조입니다.목적: 반복 작업을 자동화하여 코드를 간결하게 만들고, 코드 재사용성을 높이는 데 기여합니다.반복문은 프로그램에서 일련의 작업을 반복해서 실행하거나,
const int와 enum은 상수를 정의하는 방법입니다. enum을 사용하면 코드가 더 읽기 쉽습니다.\`사용자로부터 N을 입력받아 N x N 크기의 별을 출력합니다.1부터 9까지의 구구단을 출력합니다.플레이어가 몬스터를 공격하여 hp를 감소시키고, 일정 라운드 동안
함수 전방 선언은 함수의 실제 구현 전에 컴파일러에게 함수의 존재를 알리는 것입니다. 이것은 함수가 실제로 정의되기 전에 호출될 수 있도록 합니다.함수 오버로딩은 같은 이름의 함수를 여러 개 정의하는 것을 의미합니다. 인자의 개수나 타입이 다른 경우에 사용됩니다.위의
주제 C++에서 함수가 호출될 때 스택 메모리가 어떻게 동작하는지, 스택 프레임에 어떤 정보가 저장되는지, 그리고 CPU의 레지스터가 함수 실행에 어떤 영향을 주는지에 대해 설명한다. 특히 함수의 매개변수 전달 방식(복사 vs 참조), 함수 호출 시 생성되는 스택 프레임 구조, 재귀 함수로 인한 스택 오버플로우, 레지스터 최적화와 디버그 모드의 카나리 ...
브레이크포인트는 코드의 특정 지점에서 프로그램 실행을 일시 중지시켜 현재 상태를 확인할 수 있게 합니다. 비주얼 스튜디오에서 브레이크포인트를 설정하는 방법은 다음과 같습니다.브레이크포인트 설정: 코드를 클릭한 후 왼쪽 여백을 클릭하거나, F9 키를 눌러 설정할 수 있습
프로그래밍은 컴퓨터가 수행할 작업을 지시하는 과정입니다. TextRPG는 플레이어와 몬스터가 전투를 벌이는 간단한 게임으로, 이 과정에서 다양한 프로그래밍 개념들이 사용됩니다.변수는 데이터를 저장하는 공간입니다. TextRPG에서는 플레이어와 몬스터의 상태를 저장하기
이유전방선언클래스 추가 방법 Visual studio헤더CPP선언부구현부C++ 컴파일 단계컴파일 어셈블 링킹 실행파일전처리 단계왜 헤더써 복잡하게
배열(Array)은 자료구조에서 데이터를 관리하고 가공하기 위한 기본적인 데이터 저장 방식 중 하나입니다. 배열의 기초에 대해 아래와 같이 정리할 수 있습니다:자료구조 -> 데이터 관리:배열은 동일한 자료형의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다. 이를
이 파일은 프로그램의 진입점입니다. 코드가 주석 처리되어 있어 실제로 실행되지는 않지만, 구조는 다음과 같습니다.SetCursorOnOff(false);: 콘솔 커서를 숨깁니다.무한 루프(while (true)) 안에서 입력 처리, 게임 로직 처리, 화면 출력을 순서대
int\* ptr는 정수형 데이터를 가리키는 포인터를 선언합니다.ptr은 정수형 데이터의 주소값을 저장할 수 있습니다.&hp는 변수 hp의 주소값을 반환합니다.이 주소값을 ptr에 저장하면, ptr은 이제 hp의 메모리 주소를 가리킵니다.\*hp는 포인터 hp가 가리키
✅ 주제 C++에서 포인터 연산자(주소 연산자, 간접 연산자, 산술 연산자, 간접 멤버 연산자)를 활용하여 메모리에 접근하고, 구조체와 포인터를 연계하여 함수 간 데이터 전달과 실시간 값 변경을 수행하며, 잘못된 포인터 사용 시 발생하는 위험성까지 이해하는 실습 강의 단순히 포인터를 선언하고 사용하는 수준을 넘어, 포인터로 실제 메모리 데이터를 조작하고...
StrLen 함수:주어진 문자열의 길이를 계산합니다. 문자열 끝을 나타내는 '\\0'을 만날 때까지 반복하면서 길이를 셉니다.StrCpy 함수:주어진 소스 문자열(src)을 목적지 문자열(dest)로 복사합니다. 포인터를 사용하여 src의 각 문자를 dest로 복사합니
PrintByCopy 함수:StatInfo 구조체를 값으로 전달받아 출력합니다. 원본이 아닌 복사본을 출력합니다.PrintByPointer 함수:StatInfo 구조체의 주소를 전달받아 출력합니다. 포인터를 사용하여 원본을 가리키며 출력합니다.PrintByRef 함수:
Swap 함수:두 정수의 값을 교환하는 함수입니다.temp 변수를 사용하여 \*a와 \*b의 값을 교환합니다.Print 함수:주어진 숫자 배열을 출력하는 함수입니다.배열의 각 요소를 순차적으로 출력합니다.Sort 함수:버블 정렬 알고리즘을 사용하여 숫자 배열을 정렬하는
DIR 열거형:방향을 나타내는 상수값을 정의합니다. RIGHT, DOWN, LEFT, UP 순서로 값을 가집니다.const int MAX:보드 배열의 최대 크기를 정의합니다.int boardMAX:보드 배열을 선언합니다.int N:배열의 크기를 저장하는 변수입니다.Pr
\- Player\` 클래스: 플레이어 객체를 나타내는 클래스.멤버 함수:Attack(): 공격하는 기능.Die(): 사망 처리 기능.HealMe(int value): 지정된 값만큼 치유하는 기능.멤버 변수:\_hp: 플레이어의 체력.\_attack: 플레이어의 공격력
주제 본 강의는 객체지향 프로그래밍(Object-Oriented Programming, OOP) 의 3대 특징 중 하나인 상속성(Inheritance) 을 다루며, 이를 C++ 문법과 게임 프로그래밍에 접목시켜 실용적인 사용법과 설계 원칙을 학습하는 것이 목적입니다. 상속을 통해 부모 클래스의 속성과 동작을 자식 클래스가 물려받아 사용할 수 있으며, 코드...
주제 이 강의의 주제는 객체지향 프로그래밍의 필수 요소 중 하나인 은닉성(Data Hiding) 또는 캡슐화(Encapsulation) 입니다. 은닉성은 클래스 내부 데이터를 외부에서 직접 접근하지 못하도록 제한하고, 공개된 메서드(인터페이스) 를 통해서만 데이터에 접근하도록 만드는 설계 원칙입니다. 이로써 객체의 상태를 보호하고, 외부와 내부를 명확히 ...
이 코드 예제는 C++에서 객체지향 프로그래밍의 중요한 개념인 다형성에 대해 설명하고 있습니다. 다형성은 객체지향 프로그래밍의 3대 요소 중 하나로, 함수 오버로딩, 오버라이딩, 추상 클래스, 가상 함수 테이블(vftable), 그리고 바인딩과 같은 중요한 개념들을 포
이 코드 예제는 C++에서 멤버 변수 초기화, 생성자 및 소멸자 호출 순서, 메모리 관리 등과 관련된 중요한 개념들을 다루고 있습니다. 이 글에서는 코드의 각 부분을 상세히 분석하고, 생성자와 소멸자의 호출 순서 및 멤버 변수 초기화의 효율성에 대해 설명하겠습니다.C+
연산자 오버로딩 개념:멤버 연산자 함수 버전: 클래스 내부에 정의되어 객체 간 연산을 정의합니다. a op b 형태에서 a는 왼쪽의 객체로, 멤버 함수의 호출자가 됩니다.전역 연산자 함수 버전: 클래스 외부에 정의되어 객체 외의 타입과의 연산을 정의합니다. a op b
의미: static은 변수나 함수의 범위, 수명, 접근 방법을 변경하기 위해 사용됩니다.주요 특징:정적 변수는 함수 호출이 종료되어도 값이 유지됩니다.정적 멤버 변수는 모든 객체에서 공유됩니다.정적 멤버 함수는 객체가 아닌 클래스 자체와 관련이 있습니다.정적 변수의 특
객체지향 프로그래밍의 핵심은 캡슐화, 상속성, 다형성, 그리고 추상화입니다. 이 코드 예제에서는 이러한 개념들을 모두 살펴볼 수 있습니다.추상 클래스: Object는 순수 가상 함수(virtual void Shout() = 0;)를 가지고 있는 추상 클래스입니다. 추상
좋습니다. 주어진 조건과 형식에 따라 "동적 할당" 강의 블로그 내용을 완전히 분석해 재작성한 1부 자료를 아래와 같이 제공합니다. 이 자료는 실시간 강의에 사용할 수 있도록 구성되어 있으며, 설명식으로 작성되었습니다. ✅ 주제 본 강의의 주제는 C++에서 메모리
이 코드는 객체지향 프로그래밍(OOP)의 여러 개념을 활용하여 게임 아이템 시스템을 구현한 예제입니다. 이 예제를 통해 상속성, 다형성, 은닉성, 가상 함수, 동적 할당 등 객체지향의 핵심 개념들을 학습할 수 있습니다. 아래에서 각각의 개념을 코드와 함께 자세히 분석해
이 코드는 C 스타일의 캐스팅을 사용하여 서로 관련이 없는 타입 간의 변환을 수행하는 예제입니다. 주석에 있는 내용을 포함하여, 코드를 한 줄 한 줄 분석하고, 이에 대한 문제점과 주요 개념을 정리하겠습니다.Player 클래스는 게임에서 기본적인 캐릭터를 표현하는 클래
아래는 동적 할당과 C-스타일 캐스팅에 대한 설명, 그리고 주어진 코드에 대한 한 줄 한 줄 분석과 주석을 포함한 정리입니다.동적 할당은 프로그램이 실행되는 동안 메모리의 크기를 결정하는 방식입니다. C++에서는 new 연산자를 사용해 힙(Heap) 영역에 메모리를 할
C++에서 상속 관계에 있는 클래스들이 존재할 때, 특히 소멸자(destructor)를 올바르게 설계하는 것은 매우 중요합니다. virtual 키워드를 사용하지 않으면 메모리 누수(memory leak) 또는 자원의 해제 문제와 같은 심각한 오류가 발생할 수 있습니다.
C++에서 프로젝트가 복잡해지면, 여러 클래스들이 서로 참조하거나 종속되는 상황이 발생할 수 있습니다. 이 경우 각 클래스의 헤더 파일에서 다른 클래스의 헤더를 포함하면, 종속성의 복잡성이 증가하고 컴파일 시간이 길어질 뿐만 아니라, 관리의 어려움도 커지게 됩니다. 이
C++에서는 객체를 복사할 때 '깊은 복사'와 '얕은 복사' 두 가지 방식이 있습니다. 이 두 방식은 메모리 관리와 객체의 상태에 큰 영향을 미치므로, 올바르게 이해하고 사용할 필요가 있습니다. 이번 블로그 포스트에서는 예제 코드를 통해 깊은 복사와 얕은 복사가 어떻게
C++에서는 다양한 상황에서 객체의 타입을 변환해야 할 때가 있습니다. 이를 위해 C++은 네 가지 주요 캐스팅 방법을 제공합니다: static_cast, dynamic_cast, const_cast, 그리고 reinterpret_cast. 각 캐스팅 방법은 특정 상황
이번 포스트에서는 C++에서 발생할 수 있는 여러 가지 버그 유형을 살펴보고, 각 버그가 왜 발생하는지, 그리고 이를 어떻게 디버깅할 수 있는지에 대해 알아보겠습니다. 버그는 다양한 형태로 나타나며, 프로그램의 안정성에 큰 영향을 미칠 수 있습니다. 이를 이해하고 방지
2번 기사의 attack 값이 잘못된 쓰레기값(음수)로 출력됩니다.기대되는 동작은 2번 기사의 attack 값이 기본값 10으로 설정되는 것입니다.멤버 변수:\_hp: 기사의 생명력 (기본값 100).\_attack: 기사의 공격력 (기본값 10).생성자:기본 생성자:
선형 구조: 데이터를 순차적으로 나열한 형태. 대표적인 예: 배열 (Array) 동적 배열 (Dynamic Array, std::vector, List 등) 연결 리스트 (Linked List) 스택/큐 (Stack/Queue) 특징: 데이터를 순차적으로 관
template<typename T>:템플릿을 사용하여 노드 클래스가 다양한 데이터 타입(T)을 저장할 수 있도록 설계되었습니다.예를 들어, Node<int>, Node<float>, Node<std::string> 등 다양한 타입의 데이터를 처리
\- - using T = int: 타입 별칭으로 T를 정의하여, 나중에 변경이 쉽도록 합니다. 이 클래스는 정수형 배열(int)을 다룹니다.explicit Array(int capacity = 100):생성자로, 기본적으로 용량을 100으로 설정하지만, 사용자가 다른
두 알고리즘 A와 B를 비교할 때 다음과 같은 문제점이 있습니다:1\. 모호한 표현: "A가 B보다 조금 빠르다"와 같은 표현은 정확하지 않음.2\. 환경 의존성: 실행 속도 비교는 하드웨어, 운영 체제, 컴파일러 등에 따라 달라질 수 있음.3\. 입력 크기: 작은 입
Board 클래스 역할: 미로의 데이터를 관리하고 생성하며, 이를 콘솔에 출력.주요 기능:미로의 크기 초기화, 맵 데이터 생성, 맵 렌더링.타일의 색상 및 종류 판별.미로의 입구(출발지)와 출구(목적지) 설정.ConsoleHelper 클래스 역할: 콘솔 출력 제어.
이 강의는 Player 클래스와 Board 클래스 간의 상호작용을 통해 플레이어의 이동 로직을 구현하는 내용을 다룹니다. 주요 내용:1\. 플레이어의 위치를 초기화하고, 미로에서 이동 경로를 계산.2\. 시간 기반으로 플레이어를 경로에 따라 이동.3\. 특정 위치로 이
템플릿(Template)은 제네릭 프로그래밍을 구현하기 위한 C++의 강력한 기능입니다. 유연한 코드 작성:템플릿은 특정 데이터 타입에 의존하지 않고 코드 작성이 가능하게 합니다.다양한 데이터 타입에 대해 코드 재사용성을 극대화할 수 있습니다.컴파일 시점 처리:템플릿은
스택 : 후입선출 (LIFO)큐 : 선입선출 (FIFO)스택 (Stack):LIFO (Last In, First Out): 마지막에 추가된 요소가 가장 먼저 제거되는 자료구조입니다.사용 예: 브라우저의 뒤로 가기/앞으로 가기, 함수 호출 스택.큐 (Queue):FIFO
재귀 함수는 함수가 자기 자신을 호출하는 프로그래밍 기법으로, 특정 문제를 더 작은 하위 문제로 나눌 때 자주 사용됩니다. 재귀 함수는 직관적이고 간결한 코드를 작성할 수 있게 하지만, 적절한 종료 조건이 없으면 무한 루프에 빠지거나 메모리 오버플로를 일으킬 수 있습니
1. 트리(Tree)의 개념 정의: 트리는 계층적 구조를 가지는 데이터를 표현하기 위한 자료구조입니다. 트리는 노드(Node)와 간선(Edge)로 구성됩니다. 트리의 특징: 순환(Cycle)이 없습니다. 루트(Root) 노드에서 시작하여 하위로 확장됩니다. 트리 주요 용어 루트 노드 (Root Node): 트리의 최상단 노드...
물론이죠! 주어진 코드는 힙 구조를 사용하여 우선순위 큐를 구현한 것입니다. 각 부분을 자세히 분석하고 잘못된 부분이나 추가적인 설명이 필요한 부분을 포함하여 설명드리겠습니다.\- using namespace std;: 표준 네임스페이스를 사용하여 std::vector
주어진 코드는 그래프 이론의 기본 개념과 세 가지 그래프 표현 방법(인접 리스트, 인접 행렬 등)을 설명합니다. 각 줄의 주석과 코드가 어떤 역할을 하는지 분석하고, 필요에 따라 수정 및 추가 설명을 제공하겠습니다.그래프(Graph): 현실 세계의 사물이나 추상적인 개
주어진 코드는 DFS(깊이 우선 탐색, Depth First Search) 알고리즘의 예제 구현입니다. 주석과 코드 내용을 한 줄 한 줄 분석하고, 잘못된 부분이나 더 설명이 필요한 부분을 보완하여 자세히 설명하겠습니다.DFS(깊이 우선 탐색): 그래프 탐색 알고리즘
물론입니다! 제공된 코드와 주석을 한 줄 한 줄 분석하고 설명해 드리겠습니다. 잘못된 설명이 있으면 수정하면서 자세히 정리하겠습니다.헤더 파일 포함: \- - \`Vertex 구조체 정의:struct Vertex는 그래프의 정점을 나타내는 구조체입니다.data 멤
CalculatePath_BFS 함수는 미로와 같은 2차원 맵에서 BFS(너비 우선 탐색) 알고리즘을 사용하여 최단 경로를 찾는 메서드입니다. BFS는 시작점에서 가까운 정점부터 차례대로 탐색하므로 최단 경로를 보장합니다. 코드의 각 부분을 한 줄 한 줄 자세히 분석합
주어진 코드는 다익스트라(Dijkstra) 알고리즘을 사용하여 그래프에서 최단 경로를 찾는 방법을 설명하는 예제입니다. 다익스트라 알고리즘은 가중치가 있는 그래프에서 시작 정점에서 다른 모든 정점까지의 최단 경로를 찾는 데 사용됩니다. 주석에서는 다익스트라 알고리즘의
이 코드는 A (A-Star) 알고리즘을 사용하여 미로 내에서 플레이어가 최적의 경로를 찾아가는 과정을 설명합니다. A 알고리즘은 길 찾기에서 널리 사용되는 알고리즘으로, 현재 위치에서 출구까지의 비용을 고려하여 가장 효율적인 경로를 찾습니다. 아래는 각 코드와 주석을
이 코드는 함수 포인터와 멤버 함수 포인터의 사용 사례를 설명하며, 콜백 함수와 다양한 상황에서의 함수 포인터 활용을 보여줍니다. 주석을 포함하여 코드와 함수 포인터의 동작 방식을 자세히 설명하겠습니다.Print 함수: 화면에 "Hello World"를 출력합니다. 반
이 코드는 함수 객체(함수자, Functor)와 그 응용 사례를 다루며, 함수 포인터의 단점과 이를 보완하는 함수 객체의 이점을 설명합니다. 주석과 코드를 한 줄씩 분석하고, 템플릿 함수와의 연동 및 응용 사례를 포함해 세세하게 설명하겠습니다.함수 포인터는 전달할 수
이 코드는 std::vector의 다양한 기능과 이를 효과적으로 사용하는 방법을 설명합니다. std::vector의 크기와 용량 관리, 요소 접근 방식, 삽입 및 삭제 시 복잡도, 순회 및 검색 방법을 주석을 포함해 분석하고 있습니다. 각 기능을 한 줄씩 분석하겠습니다
이 코드는 Iterator 클래스 템플릿을 구현하여 커스텀 반복자를 정의하고, Vector 클래스와 함께 사용하여 벡터와 유사한 컨테이너의 요소를 순회할 수 있도록 합니다. Iterator 클래스에서 중요한 부분은 반복자 인터페이스를 제공하는 연산자 오버로딩과 Vect
이 코드는 Iterator 템플릿 클래스를 통해 양방향 연결 리스트에 대한 커스텀 반복자를 구현하고 있습니다. 반복자는 리스트의 요소를 순회하고 데이터에 접근할 수 있는 기능을 제공합니다. 특히 반복자 인터페이스를 위한 연산자 오버로딩을 통해 List 클래스의 요소를
클래스 정의 및 함수 템플릿Knight라는 빈 클래스 정의입니다. 이 클래스는 이후 auto를 사용하는 코드에서 포인터 타입으로 사용됩니다.템플릿 함수 Print는 어떤 타입이든 T로 받아 cout을 이용해 출력합니다. auto를 사용할 때처럼 다양한 타입을 유연하게
Iterator 클래스 정의Iterator 클래스는 정수형 포인터 \_data를 멤버로 갖는 커스텀 이터레이터 클래스입니다.두 개의 생성자를 정의합니다: 기본 생성자(포인터를 nullptr로 초기화)와 포인터를 받아 초기화하는 생성자.연산자 오버로딩 - 이터레이터 기능
벡터 선언numbers라는 정수형 벡터가 선언되었습니다. 이 벡터는 이진 탐색에 사용될 데이터 구조입니다.이진 탐색 함수 BinartSearchBinartSearch 함수는 N이라는 정수를 찾아주는 이진 탐색 알고리즘을 구현합니다.left와 right는 탐색 범위의 시
구조체 Node 정의Node 구조체는 이진 탐색 트리의 노드를 나타냅니다.멤버 변수:parent: 부모 노드를 가리키는 포인터.left: 왼쪽 자식 노드를 가리키는 포인터.right: 오른쪽 자식 노드를 가리키는 포인터.key: 현재 노드의 키 값.클래스 BinaryS
레드 블랙 트리(Red-Black Tree)는 자가 균형 이진 탐색 트리(Self-Balancing Binary Search Tree)의 한 종류입니다. 이 트리는 각 노드가 빨간색 또는 검은색으로 색상이 구분되며, 특정 균형 규칙을 따라 트리의 불균형을 방지하고 탐색
이 코드에서는 std::map의 사용법과 주요 기능을 예제로 설명하고 있습니다. std::map은 키-값 쌍으로 데이터를 저장하는 연관 컨테이너로, 삽입과 검색의 시간 복잡도는 O(log N)입니다. 이제 각 줄을 분석하고 설명해볼게요.Player 클래스: \_id라는
이 코드에서는 unordered_map을 사용하여 해시 기법을 설명하고 있습니다. unordered_map은 키-값 쌍을 해시 테이블 기반으로 저장하며, 데이터 검색, 삽입, 삭제 작업을 평균적으로 O(1) 상수 시간에 수행할 수 있습니다. 예제와 주석을 한 줄씩 자세
이 코드에서는 enum class, 상속, 다형성, 그리고 unordered_map을 사용하여 객체를 관리하는 시스템을 구현합니다. 각 줄을 상세히 분석하고 설명해드리겠습니다.enum class ObjectType: enum class를 사용하여 ObjectType이라
이 코드는 namespace와 main 함수로 구성되어 있으며, std::vector와 STL 알고리즘을 활용해 다양한 벡터의 탐색 및 변환 작업을 연습하는 예제입니다. 각 주석과 코드를 꼼꼼하게 분석해 보겠습니다.설명: namespace는 특정 코드 블록을 다른 코드
이 코드는 enum class와 class를 활용해 간단한 아이템과 캐릭터 시스템을 구현하고, std::vector와 람다 표현식을 사용해 아이템 필터링 및 작업 처리를 연습하는 예제입니다. 각 주석과 코드를 꼼꼼하게 분석해 보겠습니다.설명: enum class는 타입
이 코드는 다양한 정렬 알고리즘(Bubble Sort, Selection Sort, Heap Sort, Merge Sort)을 사용하여 벡터를 정렬하는 방법을 설명하는 예제입니다. 각 알고리즘은 시간 복잡도가 다르며, 특정 상황에 적합한 방식으로 배열을 정렬합니다. 주
이 코드는 퀵 정렬(Quick Sort) 알고리즘을 구현한 예제입니다. 퀵 정렬은 "분할 정복(Divide and Conquer)" 알고리즘의 일종으로, 배열을 피벗을 기준으로 나누고 재귀적으로 정렬하는 효율적인 정렬 방법입니다. 주석과 함께 코드를 한 줄 한 줄 분석
이 코드는 C 스타일 문자열과 C++ 표준 라이브러리 std::string 클래스를 사용해 문자열을 다루는 방법을 설명합니다. 각 주석과 코드를 한 줄씩 꼼꼼히 분석하여 설명드리겠습니다.설명:const char\* name = "Rookiss"와 const char\*
이 코드는 멀티 바이트 문자와 유니코드 관련 개념을 설명하며, 다양한 인코딩 방식과 C++에서의 문자열 처리 방법을 다룹니다. 코드와 주석을 한 줄 한 줄 자세히 분석해 보겠습니다.배경 설명: 컴퓨터는 문자를 숫자로 저장하며, 인코딩 방식에 따라 문자를 저장하는 방법이
물론입니다! 주어진 예제 코드와 함께 주석을 자세히 설명하며 분석해보겠습니다. 이 코드에서는 Knight 클래스에 복사 생성자, 이동 생성자, 복사 대입 연산자, 이동 대입 연산자 등 여러 가지 특별한 멤버 함수가 정의되어 있으며, 이들을 사용하는 방법과 l-value
\\스마트 포인터는 C++ 표준 라이브러리에서 제공하는 메모리 관리 도구입니다. 동적 메모리 할당을 더 안전하고 효율적으로 관리하기 위해 사용되며, 소멸자를 통해 자동으로 메모리를 해제합니다.shared_ptr은 참조 카운트(reference count)를 기반으로 객
weak_ptr는 shared_ptr와 함께 사용되는 스마트 포인터입니다. 주요 목적은 순환 참조(circular reference)를 방지하는 것입니다.weak_ptr는 객체를 소유하지 않고 참조만 할 수 있습니다.객체의 수명에는 영향을 미치지 않으며, 객체가 소멸되
주어진 예제는 동적 계획법(Dynamic Programming, DP)을 활용한 문제 해결을 다룹니다. 코드에서 이항 계수 계산과 ENCHANT 문제를 해결하는 방법을 설명하고 있습니다. 동적 계획법은 큰 문제를 작은 하위 문제로 나누어 해결하고, 이미 계산된 결과를
서버는 크게 세 가지로 구분됩니다:1\. 하드웨어: 물리적 컴퓨터 장치.2\. 운영체제: 서버 프로그램이 실행되는 환경.3\. 프로그램: 서버 역할을 수행하는 소프트웨어.게임 프로그래밍에서 "서버"는 주로 프로그램을 의미하며, 클라이언트와 통신하고 데이터를 처리하는 역
멀티스레드는 프로그램의 작업을 여러 스레드로 나누어 동시에 수행하는 기법입니다. 이는 프로그램이 더 많은 작업을 병렬로 처리할 수 있도록 설계되어 성능을 극대화할 수 있습니다.정의: 실행 중인 프로그램을 의미합니다. 프로세스는 독립적인 실행 단위를 가지며 자체적인 메모
쓰레드(Thread)는 프로그램 내에서 실행되는 가장 작은 실행 단위입니다. 프로세스 안에서 실행되며, 프로세스의 메모리 공간(코드, 힙, 데이터)을 공유합니다. C++에서는 <thread> 라이브러리를 사용하여 멀티스레드 프로그래밍을 구현할 수 있습니다.\`-
캐시는 CPU와 메모리 간 데이터 접근 속도를 개선하기 위해 사용됩니다. 캐시를 이해하기 위해 시간적 지역성(Temporal Locality)과 공간적 지역성(Spatial Locality) 개념이 중요합니다.의미: 최근 사용한 데이터는 다시 접근할 가능성이 높다.예시
\`- - \*\*- \*\*\`int sum = 0;: 멀티스레드 환경에서 일반 정수형 변수 사용 시 데이터 경합이 발생할 수 있습니다.atomic<int> sum = 0;: 원자적 연산을 보장하는 atomic 타입으로 선언. 스레드 간 충돌 없이 안전하게 값을
멀티스레딩 환경에서 여러 스레드가 공유 자원(예: 동적 메모리, STL 컨테이너 등)에 동시 접근하면 데이터 경합(Data Race) 문제가 발생할 수 있습니다. 이를 방지하기 위해 락(lock)을 사용하여 특정 코드 영역에 대해 한 번에 하나의 스레드만 접근할 수 있
SpinLock이란?스핀락(SpinLock)은 잠금을 얻기 위해 무작정 기다리는 방식으로 구현된 락입니다.다른 스레드가 락을 점유하고 있는 동안, 락이 해제될 때까지 루프를 돌며(lock 상태를 지속적으로 확인하며) 기다립니다.SpinLock의 특징장점:락이 해제되면
데드락은 여러 스레드가 서로 자원을 점유한 상태에서 다른 자원을 기다리며 영원히 대기 상태에 빠지는 현상입니다. 프로그램이 멈추거나 응답하지 않는 상황을 초래하며, 특히 멀티스레드 환경에서 자주 발생할 수 있는 문제입니다.데드락이 발생하려면 다음 네 가지 조건이 동시에
멀티쓰레드 프로그래밍에서 이벤트(Event)와 조건변수(Condition Variable)는 스레드 간 동기화와 통신을 위한 중요한 도구입니다. 아래에서 각각의 개념, 사용 사례, 그리고 코드 예제를 통해 자세히 설명하겠습니다.이벤트는 하나 이상의 스레드가 특정 작업이
스마트 포인터(Smart Pointer)는 C++ 표준 라이브러리에서 제공하는 객체로, 동적 메모리 관리의 부담을 덜어주는 자동화된 포인터 관리 도구입니다. 일반적인 포인터는 사용자가 직접 new와 delete를 통해 메모리를 관리해야 하지만, 스마트 포인터는 객체의
소켓 프로그래밍(Socket Programming)은 네트워크를 통해 서로 다른 시스템 간에 데이터를 주고받을 수 있도록 설계된 프로그래밍 방식입니다. 소켓은 네트워크에서 데이터를 송수신하는 데 사용되는 소프트웨어 엔드포인트(endpoint)로, 네트워크 통신을 구현하
TCP와 UDP는 인터넷에서 데이터를 전송하기 위한 두 가지 주요 프로토콜입니다. 이들은 각각 장단점과 사용 사례가 다릅니다. 아래에서 TCP와 UDP를 비교하여 자세히 설명하겠습니다.TCP는 연결 지향적(Connection-Oriented) 프로토콜로, 데이터 전송
논블로킹 소켓은 네트워크 프로그래밍에서 사용되는 소켓 동작 방식 중 하나로, 데이터 송수신 작업이 완료될 때까지 대기하지 않고 즉시 반환되는 특징을 가집니다. 이를 통해 애플리케이션은 소켓 작업이 완료될 때까지 멈추지 않고, 다른 작업을 계속 처리할 수 있습니다.블로킹
Select와 WSAEventSelect는 Windows 소켓 프로그래밍에서 사용되는 두 가지 소켓 이벤트 관리 모델입니다. 둘 다 비동기 소켓 프로그래밍에서 중요한 역할을 하며, 여러 소켓을 효율적으로 모니터링하기 위해 사용됩니다.아래에서 각각의 모델에 대해 상세히
Overlapped I/O는 Windows 운영체제에서 비동기 입출력을 처리하기 위해 제공하는 기술입니다. 프로그램이 I/O 작업(예: 파일 읽기/쓰기, 네트워크 데이터 송수신)을 요청한 후, 해당 작업이 완료될 때까지 기다리지 않고 다른 작업을 수행할 수 있도록 설계
IOCP는 Windows에서 제공하는 고성능 비동기 I/O 처리 모델입니다. 주로 대규모 네트워크 서버나 고속 데이터 전송 애플리케이션에서 사용됩니다. IOCP는 다중 스레드 환경에서 비동기 I/O 작업의 효율성을 극대화하는 데 초점이 맞춰져 있습니다.비동기 모델 기반
IOCPCORE는 일반적으로 Windows의 IOCP (I/O Completion Port) 모델을 구현하기 위한 서버 프레임워크 또는 코어 라이브러리를 의미합니다. IOCP는 고성능 네트워크 서버를 설계할 때 사용하는 Windows API 기반의 비동기 입출력 처리
Service 클래스는 서버 또는 클라이언트용 세션의 생성을 관리하고, 세션 풀링과 I/O 작업을 추상화한 베이스 클래스입니다. Service 클래스는 Session 객체를 생성하는 팩토리 패턴을 도입했으며, shared_ptr를 사용하여 객체의 메모리 관리를 안전하
Session 클래스는 IocpObject를 상속받으며, IOCP(입출력 완료 포트) 기반 비동기 통신을 처리하는 핵심 클래스입니다.friend 선언을 통해 Listener, IocpCore, Service 클래스가 Session의 private 및 protected
서버와 클라이언트 간 통신에서 주고받는 데이터 패킷을 정형화된 형태로 처리. 패킷 ID 기반의 분기 처리를 통해 다양한 패킷을 구분하고 적절한 핸들링 함수를 호출. 가변 데이터(예: 리스트, 문자열)를 패킷에 포함하고 파싱하는 방법을 제공. 재사용 가능한 코드:
데이터 직렬화: 데이터를 바이트 배열로 변환해서 전송하거나 저장할 수 있습니다. 언어 및 OS 독립적: 다양한 프로그래밍 언어(C++, Python, Java 등)와 OS에서 사용 가능하며 상호 호환됩니다. 성능 최적화: 가벼운 포맷으로, JSON이나 XML보다 빠
목표: Visual Studio에서 새로운 Windows 데스크톱 애플리케이션 프로젝트를 생성.과정:Windows 데스크톱 애플리케이션 선택 템플릿에는 기본적인 윈도우 창 생성 코드가 포함.프로젝트 이름 설정: 예시에서는 GameCoding2로 이름을 설정.템플릿
\- - - using 키워드를 사용해 기본 정수 타입에 대한 별칭을 정의합니다. 예를 들어, int8는 \_\_int8 타입과 동일합니다.DECLARE_SINGLE(classname): 주어진 클래스 이름을 사용해 싱글톤 패턴을 구현하는 매크로입니다. private:
Scene 클래스는 게임의 다양한 장면(Scene)을 관리하기 위한 기본 클래스입니다. 이 클래스는 Init, Update, Render라는 세 가지 주요 함수를 가지고 있으며, 이 함수들은 각 장면에서 구체적으로 구현됩니다.생성자 및 소멸자Scene(): 기본 생성자
더블 버퍼링은 그래픽 프로그래밍에서 깜빡임(flickering)이나 화면의 일부분이 불완전하게 그려지는 현상(화면 깨짐)을 방지하기 위해 사용하는 기술입니다. 이 방법은 화면에 직접 그리기 전에 백 버퍼(back buffer)라는 숨겨진 메모리 공간에 먼저 모든 그래픽
게임의 각 객체를 Scene처럼 체계적으로 관리하기 위한 기반 오브젝트 클래스를 생성합니다. Object 클래스는 다양한 게임 요소(Player, Monster, Missile 등)의 최상위 부모 역할을 하며, 추상 클래스 형태로 구현됩니다.폴더 구조: 📁 03.Ob
강의에서는 EditScene이라는 도구(Scene)를 만들어 그림을 그리고 저장/로드하는 기능을 추가하고 있습니다. EditScene은 선을 그리고 이를 저장하여 Unit.txt라는 파일로 관리하며, 데이터를 중앙에 정렬하는 로직을 포함하고 있습니다.\` - 헤더
리소스 매니저 코드와 주석 내용을 기반으로, 각 코드 줄과 주석 내용을 꼼꼼히 읽고 분석하여 자세히 설명하겠습니다. 긴 코드지만, 각 주요 기능과 관련된 내용에 대해 차근차근 설명하겠습니다. 리소스 관리의 기본 클래스로, 모든 리소스 객체의 공통 부모가 됩니다. \-
물론입니다! 각 슬라이드의 내용을 한글로 설명드리겠습니다.슬라이드 1 - 제목 슬라이드 (삼각 함수):이 슬라이드는 "삼각 함수"라는 제목을 가지고 있으며, 다채로운 배경이 위아래로 흐르고 있습니다.삼각 함수에 대한 내용을 소개하는 슬라이드입니다.슬라이드 2 - 삼각형
이 PPT 강의는 벡터에 관한 내용입니다. 각 슬라이드에서 다루는 개념을 간략하게 설명드릴게요.첫 번째 슬라이드 - 벡터의 기본 정보:캐릭터의 속성 정보를 표시하고 있습니다. 이 캐릭터는 X와 Y 좌표 (3, 4)에 위치하고 있으며, 이를 통해 벡터의 시작점을 알 수
내적은 두 벡터의 크기와 방향에 대한 관계를 나타내는 연산으로, 결과는 스칼라 값입니다. 이를 스칼라 곱이라고도 합니다.수학적 정의:\[$\\vec{V_1} \\cdot \\vec{V_2} = |\\vec{V_1}| |\\vec{V_2}| \\cos \\theta$](
외적은 두 벡터 간의 관계를 통해 새로운 벡터를 생성하는 연산입니다.이는 주로 3차원 공간에서 사용되며, 결과는 두 벡터 모두에 수직인 벡터입니다.수학적 정의:\[$\\vec{A} \\times \\vec{B} = |\\vec{A}| |\\vec{B}| \\sin\\t
역삼각함수에 대한 학습 자료를 요약해 드리겠습니다. 다음은 PDF에 포함된 주요 내용입니다:역함수 정의: 일반 함수 (y = f(x))에 대해, (x = f^{-1}(y))가 역함수로 정의됩니다.역함수의 존재 조건: 함수가 일대일 대응 관계(Injective)일 경우에
정의: 속도는 물체가 이동한 거리와 방향을 나타내는 물리량입니다. 따라서 벡터로 표현되며 크기(속력)와 방향을 가집니다.공식:\[$v = \\frac{\\Delta s}{t}$]( v ): 속도( $\\Delta s$ ): 위치의 변화(거리의 변화, 벡터량)( t ):
A. 포트리스 모작 1. 포트리스 뼈대잡기a. UIManager 및 리소스 추가하기받은 Resources 파일을 원래 작업하던 곳에 넣어주고엔진과 관련이 없고 컨텐츠쪽이니 Game에 넣어주기UIManager은 UI의 세부적인 좌표 엔진내용그려줘야하는 UI의 좌표를 다
목적: 기존에 작업한 코드를 보존하면서 새로운 프로젝트를 생성하여 작업을 이어가기 위함.방법: 기존 프로젝트를 복사해서 새 프로젝트로 만든다. 복사는 프로젝트 폴더 자체를 복사하여 새로운 위치에 붙여넣는 방식으로 이루어짐.결과: 새로운 프로젝트 이름은 GameCodin
액터 정의:액터(Actor)는 씬(Scene)에 배치할 수 있는 모든 오브젝트를 의미.예를 들어, 플레이어, 적, 배경 등이 액터로 표현될 수 있음.Object와의 비교:기존에 사용하던 Object 클래스와 비슷하지만, 액터는 씬에 배치 가능하며 좌표를 가짐.Init과
BitBlt는 단순히 비트맵 이미지를 복사하는 함수로, 투명 처리 기능이 없습니다.TransparentBlt를 사용하여 투명화 처리가 가능하게 수정합니다.TransparentBlt는 특정 RGB 값을 투명하게 처리합니다. 예를 들어 RGB(255,255,255)는 흰색
카메라는 컴포넌트 기반으로 만들어져 객체(Actor)에 부착되며, 해당 객체의 위치를 기준으로 씬(Scene)을 렌더링합니다.카메라는 Component 클래스를 상속받아 구현되며, 이 컴포넌트는 Actor의 일부로 추가됩니다.CameraComponent: 카메라의 역할
충돌 시스템은 컴포넌트 기반 설계를 사용하여 다양한 객체에 손쉽게 충돌 처리를 추가할 수 있게 설계되었습니다. 이를 통해 유연성과 유지보수성을 극대화합니다. 주요 요소는 다음과 같습니다:충돌 컴포넌트(Collider)의 기본 구현.충돌의 종류(BoxCollider, S
컴포넌트 기반 설계:UI 요소들은 기본 UI 클래스를 기반으로 확장(Panel, Button)됩니다.콜백 함수 사용:UI 동작(버튼 클릭 등)을 동적으로 처리하기 위해 콜백을 활용합니다.구성 요소 계층화:Panel은 하위 UI 요소를 포함하며 이를 렌더링하고 업데이트합
타일맵(Tiled Map): 격자형 타일을 기반으로 맵을 구성하는 방식.맵을 그리드 형태로 나눠 타일 단위로 관리.장점:메모리 절약: 재사용 가능한 타일 이미지 활용.효율적 렌더링: 필요한 부분만 그리기(컬링).타일맵 vs 통맵:통맵: 맵 전체를 하나의 이미지로 관리.
파일 입출력(IO):프로그램이 데이터를 메모리(RAM)에서 저장소(SSD/HDD)로 기록하거나 읽어오는 작업.RAM은 휘발성 메모리로 프로그램 종료 시 데이터가 사라짐.데이터를 저장소에 기록해 영구 저장을 보장.데이터 시트와 데이터베이스의 차이:데이터 시트: 소규모 데
사운드 시스템 역할:게임 내에서 배경음악(BGM)과 효과음(SFX)을 출력.사운드 파일(.wav)을 불러오고, 실행, 정지, 반복 등을 제어.사운드 관련 주요 구성요소:사운드 파일: 음반처럼 데이터를 저장하는 파일 (.wav 등).사운드 버퍼: 메모리 공간에 사운드 데
충돌 처리는 객체 간의 상호작용을 감지하고, 그 결과를 처리하는 게임 개발의 중요한 요소입니다. 일반적으로 두 가지 방식으로 나뉩니다:1\. 충돌 감지 (Collision Detection): 객체들이 충돌했는지 확인하는 단계.2\. 충돌 반응 (Collision Re
충돌 레이어란?객체 간 충돌을 제어하기 위해 사용.어떤 객체가 충돌 가능한지 정의.효율적인 충돌 처리를 위해 비트 플래그(bit flag) 사용.비트 플래그란?비트를 사용해 상태를 저장.한 비트로 충돌 여부를 나타냄.예: 1이면 충돌 가능, 0이면 불가능.장점: 메모리
State 패턴이란?객체가 상태(State)에 따라 다른 동작을 수행하도록 설계.상태를 독립적인 단위로 관리해 코드의 복잡도를 줄이고 가독성을 높임.적용 사례게임 개발: 플레이어, 몬스터의 동작을 상태 기반으로 관리.장점: 상태와 관련된 코드를 분리하여 유지보수성 향상
젤다 스타일의 게임 구현 목표:타일맵을 기반으로 한 이동 및 충돌 처리.캐릭터 상태를 상태 기계(State Machine)로 관리.방향과 움직임에 따라 애니메이션 및 이동 구현.구현 순서:타일맵 데이터 읽기 및 적용:갈 수 있는 영역과 없는 영역 데이터를 tilemap
상속 계층 구조는 다음과 같습니다:GameObject: 모든 객체의 기본 클래스. 공통적인 동작(Tick, Render, 상태 및 방향 관리 등)을 정의합니다.Projectile: GameObject의 하위 클래스. 발사체에 특화된 동작을 가집니다.Arrow: 발사체
GameObject는 FlipbookActor를 상속받아 애니메이션 표현과 관련된 동작을 추가적으로 제공합니다.부모 클래스의 이름을 Super로 참조하여 코드 가독성을 높이고, 부모 클래스의 메서드를 호출할 때 사용합니다.GameObject 생성자: 객체를 생성하지만
if (\_flipbook == nullptr) 애니메이션(플립북)이 없으면 바로 종료.스킬 동작은 애니메이션이 있어야 실행 가능.if (IsAnimationEnded()) 현재 스킬 애니메이션이 끝났는지 확인.DevScene\* scene = dynamic_cas
이 코드는 몬스터 AI가 A 알고리즘을 기반으로 플레이어를 추적하거나 특정 위치로 이동하도록 설계되어 있습니다. 주요 요소는 다음과 같습니다:1\. DevScene 클래스: 게임의 전체적인 씬 관리와 몬스터의 스폰 및 AI 동작을 처리합니다.2\. \*\*A 알고리즘:
이 클래스는 게임의 메인 루프와 초기화를 담당합니다.Init: 게임 자원을 초기화합니다.DirectX에서 사용하는 DC(Device Context) 및 더블 버퍼링 설정.싱글톤 매니저 초기화:TimeManager, InputManager, SceneManager, Re
이 함수는 클라이언트가 서버에 성공적으로 연결되었을 때 호출됩니다. 클라이언트 입장 프로세스를 시작하는 핵심 코드입니다.GSessionManager.Add현재 세션(GameSession)을 세션 매니저에 추가합니다.세션 매니저는 모든 활성 클라이언트 세션을 추적하며,
MyPlayer 클래스는 Player 클래스를 상속하여 구현되었습니다.기존 Player에서 처리하던 기능을 Super 키워드를 통해 부모 클래스를 참조하여 확장하거나 커스터마이징했습니다.추가된 기능:TickInput() 메서드: 키 입력을 처리합니다.TryMove()
GameSession::OnConnected:클라이언트가 서버와 연결되었을 때 호출됩니다.세션을 세션 관리자에 추가하고, 서버에 게임에 입장한다는 패킷을 전송합니다.GameRoom::EnterRoom을 호출하여 플레이어를 방에 입장시킵니다.GameRoom::EnterR
클라이언트가 이동 패킷을 서버에 전송 (Client → Server)서버가 이동 패킷을 처리하여 위치를 업데이트 (Server Processing)서버가 변경된 위치 정보를 모든 클라이언트에게 전송 (Server → All Clients)클라이언트가 서버에서 받은 정보
enum{ S_TEST = 1, S_EnterGame = 2,};class ClientPacketHandler{public: static void HandlePacket(ServerSessionRef session, BYTE\* buffer, int32 len);};v

행렬식벡터색상 원리 학습DirectX 11을 이용한 3D 게임 프로그래밍 입문 구매
CPU만 있는 컴퓨터는 기본적으로 다음과 같은 구조를 가지고 있습니다:CPU (Central Processing Unit): 중앙 처리 장치로, 모든 계산 작업을 수행합니다.Memory (RAM): 데이터를 저장하고 CPU와 데이터를 교환하는 역할을 합니다.Storag
먼저, 한글로 DirectX11 기본 프레임워크 코드에 대한 설명을 드리겠습니다.사진에서 볼 수 있는 Visual Studio 프로젝트 구조는 다음과 같습니다:GameCoding 프로젝트:리소스 파일 (리소스 파일):GameCoding.ico, GameCoding.rc
DirectX11은 Microsoft에서 개발한 그래픽 API로, 2D 및 3D 그래픽을 처리하는 데 사용됩니다. DirectX11을 사용하면 GPU와 직접 통신하여 렌더링을 수행할 수 있습니다.DirectX11을 사용하기 위해서는 다음과 같은 핵심 개념을 이해해야 합
DirectX 11에서 삼각형을 화면에 띄우기 위해 거치는 과정은 다음과 같습니다.기본 환경 설정 Direct3D Device, SwapChain 생성 RenderTargetView 설정 Viewport 설정 기하학적 도형 정의 Vertex 구조체 정의 정점
텍스처 매핑은 2D 이미지를 3D 모델의 표면에 입히는 과정입니다. 이를 통해 모델에 색상, 패턴, 세부적인 이미지 등을 추가할 수 있습니다. 3D 모델을 이루는 삼각형들의 각 정점(Vertex)에 텍스처 이미지의 좌표를 지정하면, 그래픽스 파이프라인이 이 정보를 이용
DirectX 11에서 쉐이더(Shader)에 데이터를 전달할 때 사용하는 버퍼 구조체입니다.변하지 않는 데이터를 GPU에 전달하기 위해 사용됩니다.예: 위치 이동, 회전, 크기 조절 등 Transform 정보, 조명 정보 등왜 필요할까?VertexBuffer는 초기
Rasterizer 단계는 정점 쉐이더(VS)에서 넘겨받은 삼각형을 기반으로 화면의 픽셀을 채우는 단계입니다. 실제 화면에 렌더링되는 픽셀의 위치, 컬링 처리, 채우기 모드 등을 이 단계에서 설정합니다.삼각형 내부가 그려지지 않고, 윤곽선만 표시되는 와이어프레임 모드로
Device: GPU 자원 생성 (ex. 버퍼, 쉐이더 등)DeviceContext: 파이프라인 설정 및 실행 (ex. VSSetShader, DrawIndexed)SwapChain: 화면 출력 단계 (더블 버퍼링 처리)OMSetRenderTargets: 출력 병합 단

🧭 주제 행렬 기초 완전 통합 정리 — 사칙연산, 항등/역/전치/직교 행렬, 그리고 벡터와의 곱 연산까지 📚 개념 행렬(Matrix)은 2차원 숫자 데이터의 집합으로, 행(row)과 열(column)로 구성된 표 형태를 가진 수학적 개념이다. 하지만 단순한 숫자
위치 벡터: \[x, y, z] (1x3)이동하고 싶은 양: a, b, c우리가 원하는 건:하지만 \[x y z] × 3x3 행렬로는 절대 이 결과를 얻을 수 없습니다.그래서 우리는 4차원 벡터 \[x y z 1] 와 4x4 행렬을 사용합니다.a, b, c는 이동하고
어떤 점 M이 A 좌표계에서 (x, y)라는 위치를 가진다고 해봅시다.이 점을 B 좌표계 기준으로 바라보면 좌표가 달라집니다. B 기준에서는 (X, Y)로 표현되죠.이 좌표값 (X, Y)를 구해주는 것이 바로 좌표계 변환 행렬입니다.📌 핵심 질문:“기준점 A에서의 좌
모델링 시 정해지는 고유한 좌표계예) 캐릭터의 발바닥 중심이 (0, 0, 0)오브젝트의 모든 점은 이 기준점에서 상대적인 위치로 표현됨게임 세계 전체에서의 전역 좌표계Local Space의 좌표를 실제 게임 속 위치로 바꿔주는 공간모든 오브젝트가 공유하는 하나의 기준
View Space는 카메라를 원점으로 한 좌표계입니다.카메라가 보는 방향은 +Z축 (Look) 화면 위쪽은 +Y축 (Up) 오른쪽은 +X축 (Right)→ 이것이 바로 Left-handed 좌표계 기준 뷰 공간📌 View Space = 월드의 모든 오브젝트를 카
카메라 좌표계(View Space)까지는 모든 좌표들이 현실처럼 3D 공간에 배치되어 있습니다.하지만 우리가 보는 화면은 2D 평면입니다.그래서 View 좌표를 2D로 "납작하게" 투영(Projection)해야 합니다.이 과정을 수학적으로 수행하는 것이 바로 Proje
물체의 크기를 x, y, z 방향으로 늘리거나 줄이는 행렬4x4 행렬에서 대각선 요소에 scale 값을 넣어 구성Z축 회전 예시:X, Y축 회전도 유사하게 구성오브젝트를 x, y, z 방향으로 이동시키는 행렬4x4 행렬의 마지막 열(4열)에 x, y, z 값을 넣어 구
기존 uv 맵핑을 다시 되돌리고, 이미지가 깔끔히 1장만 출력되도록 샘플러 설정을 변경합니다.SimpleMath.h, .cpp, .inl 복사하여 프로젝트에 추가 (Utils 폴더에 정리)Types.h에 다음 구문 추가:기존 XMFLOAT3 기반 코드를 전혀 고치지 않
지금까지 만든 렌더링 초기화 코드들을 잘 정리해서 하나의 구조로 만들 시간입니다.오늘은 그 중 렌더링 파이프라인의 가장 핵심인 Graphics 클래스부터 구조화할 것입니다.이 클래스는 DirectX 11에서 아래의 핵심 구성 요소들을 담당합니다:Device / Devi
DirectX 11의 렌더링 파이프라인 중 Input Assembler (IA) 단계에서는 다음 세 가지 역할이 핵심입니다:VertexBuffer: 정점 정보(위치, 색상, UV 등)를 GPU에 넘기는 역할IndexBuffer: 정점 순서를 지정하여 중복 제거 및 효율
기존에는 정점(Vertex)과 인덱스(Index)를 Game 클래스 내부에 직접 하드코딩했지만, 이제는 기하학적인 정보를 외부에서 받아서 처리할 수 있도록 Geometry 클래스를 설계한다.정점과 인덱스 데이터를 구조화해서 관리하면, 사각형뿐 아니라 다양한 도형, 나아
렌더링 파이프라인에서 VertexShader / PixelShader / ConstantBuffer / Texture는 핵심 요소이다. 이들을 효율적으로 관리하기 위해 클래스로 분리하여 프레임워크화한다.ShaderScope는 리소스가 어떤 쉐이더 단계에서 사용될지 표현
RasterizerState는 정점 처리 후 픽셀 처리 전 단계인 Rasterizer 단계에서 삼각형을 그리는 방식과 면을 제거할지를 설정하는 상태 객체다.SamplerState는 픽셀 셰이더에서 텍스처를 어떻게 샘플링할지(주소 모드, 필터 등)를 결정하는 상태다.Bl
🧭 주제 DirectX 기반 게임 엔진 설계에서의 GameObject 클래스 설계 및 구현 방법 게임 내 렌더링 가능한 오브젝트를 GameObject 클래스로 추상화하고, 각 오브젝트가 독립적인 렌더링 자원과 상태를 가지도록 구성한다. 기존 Game 클래스에서 처리하던 렌더링 로직을 오브젝트별로 분리하여 유지보수성과 확장성을 확보한다. VertexSh...
Component 클래스는 GameObject의 부품이 되는 클래스입니다. 즉, GameObject는 다양한 기능(예: Transform, Renderer, Collider)을 조합하여 하나의 동작 가능한 객체가 됩니다.Transform은 Component를 상속받아
DirectX 또는 OpenGL을 활용한 엔진 구조 연습은 다음 두 가지 큰 의미를 가진다:그래픽스 지식 습득저수준 API를 통해 렌더링이 실제로 어떻게 작동하는지 이해할 수 있다.게임 엔진 구조 설계 학습GameObject 중심의 구조를 직접 설계하며 컴포넌트 기반
주제 본 강의의 핵심은 GameObject의 렌더링 책임을 MeshRenderer 컴포넌트로 완전히 분리하고, Camera/Transform 데이터를 독립적으로 Shader에 전달하는 효율적 구조를 설계하는 데 있다. 유니티와 유사한 조합형(Component-Based) 아키텍처로 전환하며, Mesh(기하 정보)와 Material(렌더링 방식) 을 분리할...
지금까지는 Game 클래스에서 직접 오브젝트(\_monster, \_camera)를 만들고 렌더링했지만, 이는 규모가 커지면 유지보수가 어려워집니다. 그래서 Unity처럼 오브젝트들을 Scene이라는 하나의 단위로 묶고, 여러 Scene을 동적으로 로드하거나 전환하는
이렇게 선언하고 초기화하면 전역 어디서든 GGame->을 통해 Game 인스턴스의 기능을 호출할 수 있다.✅ 이제부터는 GGame->Update(), GGame->Render() 등의 방식으로 접근하도록 변경해야 한다.MeshRenderer는 렌더링 시 Pipeline
RenderManager는 게임의 모든 포탈 에너지 목록을 관리하고 레네드링을 수행한다.이중 관리 구성용 지원 및 데이터 전달을 위한 RenderHelper, 공용 Buffer와 레이어드 구성, 모든 어빌제트 구도 수행\*\* 가 가능해지는 것이 항목.해당 값들은 쉐이
Mesh는 물체의 형태(지오메트리)를 정의합니다.VertexBuffer와 IndexBuffer로 구성되며, Geometry를 기반으로 정점을 설정합니다.GeometryHelper를 통해 사각형 정점을 생성생성된 Vertex/Index Buffer는 Create() 함수
애니메이션은 여러 개의 이미지를 일정 시간 간격으로 순서대로 재생하여 움직임처럼 보이게 하는 기술입니다. 우리는 하나의 큰 이미지(Sprite Sheet)에서 일정한 영역을 잘라내어 순차적으로 보여주는 방식으로 애니메이션을 구현할 것입니다.Sprite Sheet: 여러
지금까지 우리는 애니메이션 정보를 메모리상에서만 다루고 있었다. 하지만 실전 게임 엔진에서는 애니메이션 정보를 파일에 저장하고, 실행 시 파일로부터 불러오는 기능이 필수다.이때 우리가 직접 포맷을 정의해도 되지만, 읽고 쓰기 편한 구조를 위해 일반적으로 많이 사용하는
Windows Desktop Wizard 선택 프로젝트 이름: Client 솔루션 이름: GameCoding2솔루션 탐색기에서 Client 제거 및 폴더 삭제새 프로젝트 추가 → Static Library → 이름: Enginepch.h, framework.h →
DirectX에서 사각형(Quad)을 그리기 위해선 두 가지 방법이 있습니다:삼각형 2개를 조합하여 사각형을 표현인덱스 버퍼(Index Buffer)를 활용하여 정점 수를 최소화하고 사각형 표현이번에는 두 번째 방식인 인덱스 버퍼를 사용하는 방식을 선택하여 구현해보겠습
Constant Buffer는 CPU에서 GPU로 일정한 값(행렬, 조명 정보 등)을 전달할 때 사용하는 구조입니다.대표적인 예로 World, View, Projection 행렬을 들 수 있으며, 셰이더 내에서 이 값들을 활용하여 정점 데이터를 변환합니다.먼저 셰이더에
우리는 유니티 스타일을 참고하여 카메라를 다음과 같은 구성으로 조립합니다:Transform: 위치와 방향을 제어Camera: View / Projection 행렬 계산CameraScript: 입력에 따라 위치/회전을 제어🔍 View 행렬은 카메라가 어디를 바라보는지,
텍스처 매핑은 3D 모델의 정점(Vertex)에 UV 좌표(2D 좌표)를 부여하여, 2D 이미지를 3D 모델 표면에 입히는 기술입니다.U와 V는 X, Y 좌표와 동일한 개념이며, 이미지의 비율에 따라 정점에 위치한 픽셀 색상을 매핑합니다.✅ 텍스처 UV 좌표를 기반으로
큐브는 총 6개의 면으로 구성각 면마다 텍스처 좌표(UV)가 다르기 때문에, 8개의 정점으로는 부족함각 면에 4개의 정점 필요 → 총 24개의 정점한 면은 2개의 삼각형으로 구성 → 총 12개 삼각형, 36개의 인덱스실행하면 텍스처가 맵핑된 큐브가 생성됩니다.구는 도넛
Sampler는 텍스처 좌표를 기준으로 어떤 색상을 가져올지, 즉 텍스처를 어떻게 샘플링할지 결정하는 객체다.텍스처 좌표(UV)가 텍셀(Texel) 중심에 딱 맞지 않을 때,텍스처가 확대되거나 축소될 때,또는 좌표가 0,1 범위를 벗어났을 때,Sampler가 샘플링 방
Height Map은 각 위치의 "높이" 정보를 담고 있는 흑백 이미지입니다. 밝은 픽셀일수록 높은 지형어두운 픽셀일수록 낮은 지형으로 표현됩니다.이런 Height Map 이미지를 기반으로 2D Mesh의 각 정점에 높이 값을 적용하여 실제 3D 지형처럼 보이게 만드
Normal Vector는 어떤 표면에 수직인 방향을 나타내는 단위 벡터입니다.3D 그래픽스에서 Normal은 조명 계산, 음영 처리, 충돌 감지 등 다양한 곳에 사용됩니다.빛이 수직으로 들어올수록 밝게 표현빛이 수평으로 비출수록 어둡게 표현→ 빛과 Normal 벡터의
3D 그래픽스에서 Mesh는 정점(Vertex), 인덱스(Index), 도형 형상(Geometry), 월드 변환(World Matrix) 등의 요소를 통합적으로 묶은 리소스 객체(Resource Object)이다. 주로 다음과 같은 구성 요소를 가진다.Geometry&
초기에는 다음과 같은 방식으로 MeshRenderer::Update() 내에서 직접 Shader 값을 세팅했습니다.이는 전역 변수처럼 보이지만, 내부적으로 모든 값을 한꺼번에 갱신하는 fake 방식입니다. 하나의 값만 변경해도 다른 값들이 덮어써지는 비효율적이고 위험한
Depth Buffer (깊이 버퍼): 픽셀의 z-값(깊이)을 저장하여 화면에서 가장 앞에 있는 물체만 렌더링되도록 합니다.Stencil Buffer (스텐실 버퍼): 특정 픽셀만 렌더링되도록 필터링합니다. 복잡한 이펙트, 마스킹, 포털 등의 구현에 사용됩니다.3D 공
우리가 물체를 보는 건 ‘빛’ 덕분입니다. 현실 세계에서 빛은 반사와 굴절을 거쳐 눈에 들어오지만, 그래픽스에서는 이러한 과정을 실시간으로 계산하기엔 비용이 너무 큽니다.핵심은 "최소한의 비용으로 그럴싸한 조명 효과를 구현하는 것"그래서 우리는 현실 세계의 조명을 단순
Diffuse Light는 빛이 물체의 표면에 닿아 여러 방향으로 퍼지는 현상을 묘사합니다. 표면에 수직일수록 더 밝고, 비스듬하면 어둡게 보입니다.빛의 방향과 물체의 표면 법선(Normal)의 관계에 따라 색상이 결정됩니다.시점(Viewpoint)과는 무관합니다. 즉
Specular Light는 빛이 매끄러운 표면에 부딪혀 특정 방향으로 반사될 때 생기는 하이라이트 효과입니다.빛의 방향, 표면의 법선(Normal), 관찰자(카메라)의 위치 모두가 영향을 미칩니다.반사된 빛의 방향과 눈의 위치가 일치할 때, 물체에 강한 빛 번쩍임(눈
Emissive 조명은 물체가 자발적으로 빛을 내는 것처럼 보이게 하는 조명입니다.외부 광원과 무관물체 자체의 발광 속성(Material Emissive)에 따라 표현주로 외곽선(림라이트), 불빛, 마법 효과 등에 사용Ambient~Specular은 외부 조명의 영향을
기존의 12. Lighting_Emissive.fx 쉐이더를 복제하여 13. Lighting.fx로 만들고 Shaders/Week2에 저장합니다.15\. EmissiveDemo 클래스를 복제해 16. LightingDemo 클래스를 생성합니다.Main에서는 다음과 같이
Material(재질)은 물체가 어떤 빛을 받았을 때 어떤 시각적 효과를 낼지를 결정하는 중요한 요소입니다.여기서 말하는 Material은 단순히 텍스처뿐만 아니라 Shader, MaterialDesc(ambient, diffuse, specular, emissive)
Normal Mapping은 3D 모델의 표면을 더욱 디테일하고 사실적으로 표현하기 위한 그래픽스 기법입니다. 겉보기에는 단순한 메시라도, 빛의 반사 방향(노멀 벡터)을 픽셀 단위로 조작함으로써 울퉁불퉁한 질감이나 미세한 요철을 표현할 수 있습니다.핵심 개념: 정점을
Emissive 조명이 이상하게 동작한다는 제보를 받고 문제를 재현해보았습니다.NormalMappingDemo::Init:NormalMappingDemo::Update:빛의 다른 성분은 모두 꺼두고 Emissive만 남긴 상태로 테스트.✅ 실행 결과: 오브젝트 외곽만
FBX는 Autodesk에서 만든 3D 모델 포맷으로, 단순히 메시 정보만 담고 있는 것이 아니라 애니메이션, 머티리얼, 텍스처, 본 정보, 라이트, 카메라 등 다양한 정보를 포함합니다. Unity나 Unreal Engine에서도 .fbx를 사용하면 복잡한 캐릭터, 애
Assimp에서 머티리얼 정보를 파싱해 asMaterial에 담고, 벡터 \_materials에 저장합니다.실행 후 Resources/Textures/House/House.xml 파일 생성됨!
Assimp를 통해 FBX 파일의 루트 노드부터 재귀적으로 트리를 순회하며 Bone 정보를 가져옵니다. 현재는 스켈레톤보다 "계층 노드 = Bone" 이라고 가정하고 구조를 구성합니다.📌 FBX의 Transform 정보는 Relative(부모 기준) 좌표계입니다. 따
ReadAssetFile로 FBX를 메모리로 읽고ExportMaterialData: XML로 저장 (텍스처/머티리얼 정보)ExportModelData: .mesh 바이너리로 저장 (정점/인덱스/Bone 정보 포함)텍스처처럼 바이트 단위로 저장해야 할 때 FileUtil
실행하면 .mesh, .xml 형식의 커스텀 바이너리/텍스트 파일이 생성됩니다. 이는 FBX로부터 추출한 모델 및 머티리얼 정보를 우리 엔진 형식으로 저장한 결과입니다.이제 실행하면 화면에 탱크가 출력됩니다. 하지만 모양이 이상하게 왜곡되어 중앙에 몰려 있는 듯한 모습
GitHub에서 "ImGui"를 검색해 소스코드를 다운로드합니다.압축 해제 후 examples 폴더에서 example_win32_directx11.sln을 실행합니다.해당 예제는 별도 라이브러리가 아닌 소스코드 직접 포함 방식입니다.example_win32_direct
2D 애니메이션에서는 프레임마다 스프라이트(이미지)를 틀어주는 방식으로 애니메이션을 구현한다.하지만 3D에서는 각 프레임마다 모델 전체를 교체하는 것은 비효율적이다. 대신 뼈대(Bone)를 기준으로 정점을 변형시키는 방식이 사용된다.즉, 정점(Vertex)은 고정되어
스키닝은 정점(Vertex)이 어떤 뼈대(Bone)에 얼마나 영향을 받는지를 정의하는 기술입니다.2D에서는 이미지(Sprite)를 프레임별로 교체해 애니메이션을 표현하지만,3D에서는 하나의 메쉬 모델이 뼈대의 움직임에 따라 함께 움직입니다.그래서 정점은 뼈대의 움직임을
이번 포스팅에서는 Assimp를 통해 FBX 파일에서 애니메이션 정보를 추출하고, 이를 직접 정의한 구조체에 담아 바이너리 파일(.clip)로 저장하는 시스템을 정리한다.핵심은 "애니메이션이란 프레임 단위로 본(Bone)의 SRT(Scale, Rotation, Tran
FBX 파일은 Assimp를 통해 불러올 수 있지만, 매번 파싱하는 건 속도와 효율성에서 큰 손해입니다.따라서 Tank.anim이라는 Binary 애니메이션 파일을 미리 저장하고, 런타임에는 빠르게 읽어오는 구조를 설계합니다.ReadMaterial() → 머티리얼 데이
스카이박스는 일반적으로 큐브 형태로 구현하는 경우가 많다. 카메라를 중심으로 큐브를 배치하고, 각 면에 하늘 텍스처를 입히는 방식이다. 하지만 이는 큐브 6면에 각각 텍스처를 입혀야 하고, 텍스처 좌표 계산도 번거롭다.그래서 우리는 더 간단하게 구(Sphere) 하나를
DirectX11을 포함한 모든 렌더링 파이프라인에서 "드로우콜"은 굉장히 중요한 개념입니다. 쉽게 말해, 드로우콜은 GPU에게 "이거 그려!"라고 명령을 보내는 호출입니다.예를 들어, 큐브 하나를 그리고 싶다면:메쉬(Mesh) 정보머테리얼(Material)쉐이더(Sh
매 프레임마다 동일한 메쉬와 머티리얼을 가진 오브젝트들을 하나의 버퍼에 묶어 GPU에 전달해야 한다. 이 역할을 하는 클래스가 InstancingBuffer다.CreateBuffer: 최대 인스턴스 수 기준으로 CPU write가 가능한 버퍼 생성PushData: Ma
이전에 학습한 Mesh Instancing은 구나 큐브처럼 하나의 메시로 구성된 오브젝트를 효율적으로 렌더링하는 방식이었습니다. 이번엔 FBX로 임포트한 복잡한 모델을 같은 방식으로 최적화합니다. 이 모델은 여러 개의 메시와 뼈(Bone) 구조를 가지고 있으며, Mod
ModelInstancingDemo를 복사해서 AnimInstancingDemo로 이름을 바꾼다.Init, Update, Render 함수는 뼈대는 동일하되, ModelRenderer → ModelAnimator로 교체한다.애니메이션 데이터를 가진 모델 Kachujin
지금까지 따로따로 관리하던 MeshInstancing, ModelInstancing, AnimationInstancing을 하나로 통합.하나의 Shader(23. RenderDemo.fx)로 모든 종류의 렌더링을 처리할 수 있게 구성.GameObject마다 어떤 타입의
기존에는 RenderDemo에서 직접적으로 \_camera, \_objs, LightDesc 등을 관리하면서 모든 오브젝트와 조명을 수동으로 Update 및 렌더링했음.이 방식은 기능이 추가될수록 관리 포인트가 늘어나며, 재사용성도 떨어지는 구조.→ Scene 단위로
우리가 잘 아는 실수(real number)는 √(-1)을 계산할 수 없다.그래서 수학자들은 상상의 수를 도입했는데, 이게 바로 허수(i)이다.i² = -1 복소수: z = a + bi (a는 실수, b는 허수 계수)복소수는 실수부와 허수부로 구성되며, 복소수끼리의
Compute Shader는 기존의 렌더링 파이프라인에서 벗어나 GPU의 병렬 처리 능력을 범용 연산(GPGPU: General-Purpose computing on Graphics Processing Units)에 사용할 수 있게 해주는 쉐이더 단계다. CPU는 연산
Dispatch(5, 3, 2)→ 총 30개의 Thread Group이 생성된다.→ 각 Group은 우리가 numthreads(10, 8, 3)으로 지정한 대로 240개의 쓰레드를 포함한다.즉, 총 30 × 240 = 7200개의 쓰레드가 동시에 동작할 수 있다는 말이
텍스처 이미지도 결국은 수많은 픽셀 데이터로 구성된 "데이터 덩어리"입니다.ComputeShader가 이 데이터를 조작하려면, GPU에서 읽고 쓸 수 있는 구조로 버퍼를 준비해야 합니다.전달받은 텍스처의 정보(크기, 포맷 등)를 바탕으로 \_input 자원을 새로 생성
StructuredBuffer는 GPU와의 연산을 위해 데이터를 구조체 단위로 주고받을 수 있게 해주는 DirectX11의 고급 데이터 버퍼입니다.RawBuffer는 단순한 바이트 배열StructuredBuffer는 명확한 구조체 배열즉, 우리가 정해준 struct 타
RenderManager는 Init 시점에 특정 쉐이더와 관련된 ConstantBuffer를 초기화해. 그런데 쉐이더가 바뀌면 이전 상태가 날아가버려. 즉, 여러 개의 쉐이더를 동시에 쓰는 상황에 적합하지 않았어.LightDesc, MaterialDesc 같은 정보는
Viewport는 3D 그래픽에서 렌더링된 결과가 실제 화면에 표시되는 영역을 말한다.쉽게 말해, 우리가 만든 3D 세계가 실제로 “어디에”, “어떻게” 보여질지를 결정하는 중요한 개념이다.3D → 2D 변환의 마지막 단계가 바로 이 Viewport 변환이다.3D 오브
게임에서 충돌은 크게 두 가지로 나뉜다.레이저를 쏴서 무언가를 맞추는 경우 (RayCasting)두 개의 오브젝트가 서로 충돌하는 경우 (Object vs Object)두 경우 모두 충돌(Collision)이라는 개념을 기반으로 한다.먼저 테스트를 위한 씬을 만들기 위
축 정렬 박스 충돌체.x, y, z의 축과 항상 평행한 박스.연산이 매우 간단하고 빠름.회전이 없는 물체 또는 정적인 오브젝트에 적합.회전 가능한 박스 충돌체.축과 일치하지 않아도 됨.박스 자체가 회전 가능하기 때문에 정밀한 충돌 판정 가능.회전이 잦은 오브젝트, 복잡
마우스로 Terrain을 클릭했을 때 정확히 클릭한 위치를 알아내기향후 해당 위치로 캐릭터 이동, 지형 편집 등을 구현하기 위한 기반 만들기그냥 하나의 커다란 Collider를 Terrain에 붙이면 안 될까?❌ 불가능합니다.왜냐하면 Terrain은 단순 평면이 아니라
도형들의 정의(구조체) 방식 이해도형의 수학적 의미와 기능적인 용도 파악추후 충돌 판정, 피킹 테스트, 디버깅 등에 활용할 수 있도록 구조화파일 위치: Engine/99.Headers/Math/Primitive3D.h도형은 하나의 클래스로 모으기보다 각 도형별로 구조체
먼저 유틸리티 기능을 담당할 MathUtils 클래스를 생성합니다.위치: Engine/99.Headers/Math/주요 기능: PointInXXX, ClosestPoint 시리즈구 내부에 점이 있는지를 판단하려면, 중심과 점 사이의 거리를 구하고 그것이 반지름보다 작거
두 구가 충돌하고 있는지는 중심 간 거리와 반지름 합을 비교하면 된다.중심 간 거리 제곱이 두 구의 반지름 합의 제곱보다 작거나 같으면 겹치는 것이다.제곱 비교를 통해 루트 연산을 생략하여 성능 최적화.AABB 박스에서 가장 가까운 점을 찾고, 그 점과 구 중심 간의
Ray는 시작점과 방향을 가지는 직선이다. 일반적인 선분(Line)과는 달리, Ray는 한 방향으로 무한히 뻗어 나간다. 따라서 Ray의 핵심은:origin (시작점)direction (방향 벡터)이다. 이 Ray가 Sphere, AABB, Plane, Triangle
일반적으로 UI를 구성할 때는 게임의 3D 씬과는 별도의 2D 공간에서 버튼과 같은 인터페이스 요소를 렌더링하고, 이 위에 클릭 이벤트를 처리할 수 있어야 한다. Unity에서 EventSystem과 InputModule이 이런 역할을 해주는데, 여기서는 직접 구현해본
Billboard는 3D 공간에 존재하지만 항상 카메라를 바라보는 특성을 가진 2D 사각형(Quad) 형태의 오브젝트야. 마치 게임 속의 NPC 이름표, 체력바, UI 표지판, 파티클(비, 눈, 연기 등)이 항상 정면을 유지해야 할 때 쓰이지.3D 모델링보다 훨씬 가볍