목록분류 전체보기 (45)
3냥 집사이면서 게임 개발자입니다.

// 렌더링 로직을 담당하는 함수void SoftRenderer::Render2D(){ ... float sin = 0.f, cos = 0.f; Math::GetSinCos(sin, cos, currentDegree); // 현재 화면의 크기로부터 길이를 비교할 기준양 정하기 static float maxLength = Vector2(_ScreenSize.X, _ScreenSize.Y).Size() * 0.5f; // 원을 구성하는 점 그리기 HSVColor hsv(0.f, 1.f, 0.85f); for (auto const& v : squares) { // 극좌표계로 변경 Vector2 polarV = v.ToPolarCoordinate(); // 극좌표계의 각 정보로부터 색상을 결정한다. if..

요약극좌표계:회전 동작을 기반으로 설계된 좌표계이며, 회전을 관리하고 구현하는데 좀 더 편리하도록 고안된 좌표계원점으로부터의 거리 r과 각 θ 두 요소로 구성되며 좌표는 (r, θ)로 표시한다. 활용: 주로 시간에 따른 회전의 움직임, 회전에 관련된 효과를 연출 등

요약 삼각함수의 역함수 : 게임 제작 과정에서 거꾸로 주어진 벡터의 좌표로부터 이에 대응하는 각도를 얻어내는 작업이 필요한 경우에 사용한다.삼각함수의 공역과 정의역의 범위를 제한해 전단사함수로 만들면 해당 삼각함수의 역함수가 된다. arcsin 함수의 정의역 [-90, 90] 공역 [-1, 1]arccos 함수의 정의역 [0, 180] 공역 [-1, 1]arctan함수는 정의역만 제한 (-90, 90) arctan함수의 용도 : 임의의 벡터 (x, y) 라고 할 때 분수식 y/x를 계산해 벡터로부터 tan 함수 값을 얻을 수 있다.이 tan 값을 arctan 함수에 넣으면 해당 벡터가 x축과 이루는 사잇각을 얻어낼 수 있다. arctan2 함수 :일반 삼각함수의 역함수들은 모두 3사분면에서의 치역을 구..
겉으로 기능만 간단하게 봤을 때 비슷한 것 같아서 어떻게 작동하고 차이점이 있는지 정리하고자 한다. P2P의 Super Peer- 개념 : - P2P 네트워크의 한 노드(클라이언트)가 특별한 역할을 맡아 네트워크의 중심적인 기능을 수행하는 방식 - Super Peer는 다른 클라이언트(일반 Peer)들에 비해 더 강력한 네트워크 성능이나 리소스를 가지고 네트워크를 관리한다. - 작동 방식 : 1. Super Peer 는 네트워크 일부 로직(예: 데이터 동기화, 요청 중계)을 담당하며, 다른 클라이언트와 연결을 관리 2. 클라이언트 간 직접 연결 (Peer-to-Peer)이 이루어지며, Super Peer는 보조적인 역할을 한다. 3. Super Peer 는 필요에 따라 다른 클라이언트가 그 역할을 대..
게임 서버에 대한 지식을 쌓기 위해 독학한 내용으로, 검색과 ChatGPT를 통해 공부한 내용을 작성합니다.P2P (Peer to Peer)말 그대로 플레이어(클라이언트)들이 서로 직접 연결해 데이터를 주고받는 네트워크 구조다. 적은 인원이 함께 게임을 진행하는 (대부분 10명 내외) MO 류의 게임에서 주로 사용된다.플레이어의 클라이언트에서 직접 로직을 처리하므로 서버의 부담이 적고 (거의 없고) 빠른 액션 처리와 정확한 충돌처리가 가능하다. P2P 방식은 다시 2가지로 나누어 진다. 모두가 동등한 P2P 게임에 참여한 플레이어끼리 그물처럼 모두가 연결한다. 자신의 컨트롤이나 처리 결과를 다른 플레이어에게 직접 알려주는 방식이 방식은 로직이 분산되므로 판정에 어려움이 있다. 핵, 치트 검증이 불가하고,..

언리얼 엔진의 멀티 플레이 시스템을 독학하고 있기에 틀린 내용이 있을 수 있습니다. 이 포스팅은 멀티 플레이에 대해 공부하던 중 좋은 영상을 발견하고 영어로 작성된 내용을 언제든 찾아 볼 수 있게 한글로 정리하고자 작성합니다. https://www.youtube.com/watch?v=JOJP0CvpB8w&t=952s 멀티플레이란 2명 이상의 유저가 같은 환경에서 플레이하는 것,언리얼 엔진은 태생이 FPS 게임을 만들기 위한 엔진으로 UDP 기반의 네트워킹 시스템이 제공된다. Net Mode : World 의 속성3가지의 간단한 질문을 바탕으로 넷모드를 구별할 수 있다. 1. 플레이가 가능한 환경인가?2. 권한이 있는가? (서버인가?)3. 외부의 접속에 열려 있는가? 이 질문으로 4가지의 넷모드..

// 게임 로직과 렌더링 로직이 공유하는 변수Vector2 currentPosition;float currentScale = 10.f;float currentDegree = 0.f;// 게임 로직을 담당하는 함수void SoftRenderer::Update2D(float InDeltaSeconds){ ... // 게임 로직의 로컬 변수 static float moveSpeed = 100.f; static float scaleMin = 5.f; static float scaleMax = 20.f; static float scaleSpeed = 20.f; static float rotateSpeed = 180.f; Vector2 inputVector = Vector2(input.GetAxis(InputAxi..

물체를 이동시키고 크기를 늘리는 동작은 서로 수직인 x축과 y축이 서로 독립적으로 적용된다. 따라서 x축과 y축이 따로따로 계산 후 두 결과를 결합한 것과 같다. 물체를 회전시키는 동작은 x와 y값이 함께 영향을 미친다. 둘을 독립적으로 계산할 수 없다는 얘기다. 회전을 구하기 위해 벡터 공간에서의 기저벡터 개념을 활용하고, 일반적으로 벡터를 회전시켰을 때 어떤 값이 나오는지를 구하는 수식을 증명해보았다.

삼각함수로 하트 그리기 CK 소프트 렌더러는 각도법과 호도법을 사용해 sin함수와 cos함수 값을 얻어올 수 있도록 함수를 제공한다.float sin, cos;Math::GetSinCos(sin, cos, 30); // 30 degreeMath::GetSinCos(sin, cos, Math::TwoPI); // 2pi radian 일명 하트 방정식이라 불리는 식을 이용해 하트를 그려보는 코드를 짜보자. x = 16 sin^3세타y = 13 cos세타 - 5cos 2세타 - 2cos3세타 - cos4세타 // 게임 로직과 렌더링 로직이 공유하는 변수Vector2 currentPosition;float currentScale = 10.f;// 게임 로직을 담당하는 함수void SoftRenderer::Upd..

기존 벡터 공간의 덧셈과 곱셈의 연산을 활용해 벡터의 움직임을 구현했다. 두 가지 연산으로는 직선의 움직임만 표현할 수 있었다.회전은 원의 궤적을 따라 이동하는 움직이기 때문에, 이와 밀접하게 연결되어 있는 삼각함수를 이해하고자 한다. 요약삼각함수 : 직각 삼각형에서 측정할 수 있는 사잇각이 0도보다 크거나 90도 보다 작을 때 데카르트 좌표계 상에 대치하고 사잇각의 범위를 실수 전체로 확장한 대응관계를 삼각함수라고 한다. 삼각비 : 직각 삼각형을 구성하는 세 변에서 두 변을 뽑아 각각의 비례관계를 나타낸 것, 대표적으로 sine, cosine, tangent 가 있다. sin함수와 cos 함수의 개념은 직각 삼각형에서 출발했지만, 원점을 중심으로 반지름이 1인 평면 위의 단위원을 사용해 나타내면 ..
메서드 템플릿은 클래스 템플릿 안에 정의해도 되고 비템플릿 클래스 안에 정의해도 된다.메서드 템플릿은 클래스 템플릿에 복제 생성자와 대입 연산자를 정의할 때 특히 유용하다.* 가상 메서드와 소멸자는 메서드 템플릿으로 만들 수 없다. 간단한 예시 Grid IntGrid;Grid DoubleGrid;이렇게 만든 두 변수는 타입이 서로 다르다.Grid 객체를 받는 함수는 Grid 객체를 인수로 받을 수 없다.int 를 double로 강제 형변환해서 int원소를 double원소로 복제할 수는 있지만, 위 객체끼리는 대입하거나 변환이 불가능하다.따라서 다음과 같이 작성하면 컴파일 오류가 발생한다.DoubleGird = IntGrid;이유는 Grid 템플릿에 대한 복제 생성자와 대입 연산자를 어떻게 정의했는지에서..

기존의 함수를 작성하는 것을 매개변수화한다고 표현한다.템플릿은 매개변수화 개념을 더욱 발전시켜 값 뿐만 아니라 타입에 대해서도 매개변수화 한다.템플릿을 이용하면 주어진 값 뿐만 아니라 그 값의 타입에 대해서도 독립적인 코드를 작성할 수 있다. 예를 들어 int, Car, SpreadsheetCell 과 같은 각각의 타입마다 따로 정의하지 않고, 스택 클래스 하나에 모든 타입에 적용할 수 있게 만들 수 있다. 템플릿이 제공하는 기능이 정말 뛰어나다는 점과 C++의 템플릿 문법이 상당히 복잡해서 템플릿을 집중적으로 학습자고자한다.C++에서 제공하는 템플릿 기능을 주로 표준 라이브러리를 사용하는 관점에서 작성하려한다. 클래스 템플릿멤버 변수 타입, 메서드의 매개 변수 또는 리턴 타입을 매개변수로 받아서 클래스..

요약 선형성 : (간략한 설명) 가산성과 동차성 성질이 항상 성립하는 경우, 선형성이 있다.선형 결합 : 선형 연산을 사용해 n개의 스칼라와 n개의 벡터를 결합해 새로운 벡터를 생성하는 수식선형 종속의 관계 : 모든 a(스칼라)가 0이 아님에도 영벡터를 만들 수 있다면, 선형 결합에 사용된 벡터는 서로 선형 종속의 관계를 가진다 라고 표현한다.선형 독립의 관계 : 영벡터가 나오기 위해서 모든 값이 0이어야 한다면 선형 결합에 사용된 벡터들은 서로 선형 독립의 관계를 가진다 라고 표현한다. 선형 독립의 관계를 가지는 벡터끼리 결합하면 벡터 공간에 속한 모든 벡터를 생성할 수 있다. 이는 벡터 공간을 다룰 때 중요하게 여겨지는 성질이다. 선형 종속 관계에 있고, 평행 관계에 있는 벡터로 알아보았을 때, 평..
프로젝트 환경은 이전과 같습니다. 벡터로 원그리기 반지름이 5인 원을 생성하기 위해, 먼저 원을 둘러싼 사각형 영역을 생성하고, 이로부터 원을 구성하는 벡터만 골라내는 방법을 사용한다.사각형 영역을 구성하는 벡터에서 반지름의 크기가 5보다 작거나 같은 벡터를 묶으면 원의 형태가 만들어진다.사각형 영역에 속한 각 벡터의 크기는 벡터의 크기 수식을 사용해 계산할 수 있으며, CK소프트 렌더러 Vector2 에 구현되어 있다.struct Vector2{ ... FORCEINLINE float Size() const; FORCEINLINE constexpr float SizeSquared() const; ...};FORCEINLINE float Vector2::Size() const{ ..

요약 벡터의 크기 : 원점으로부터 벡터까지의 최단 거리를 의미한다.원점과 벡터를 연결해 직각 삼각형을 그린 후, 피타고라스의 정리를 사용해 거리를 측정한다. 용어 노름 Norm : 벡터의 크기단위 벡터 Unit Vector : 크기가 1인 벡터 정규화 Normalize : 임의의 벡터를 크기가 1인 단위 벡터로 가공하는 과정

이득우의 게임 수학 책에서 제공하는 프로젝트 파일을 이용했습니다. CK 소프트 렌더러에서 좌표를 관리하기 위해 선언한 Vector2 를 살펴보았다.평면의 벡터 값을 관리하는 Vector2 구조체의 선언 struct Vector2{...public:FORCEINLINE constexpr Vector2 operator*(float InScalar) const;FORCEINLINE constexpr Vector2 operator+(const Vector2& InVector) const;...static constexpr BYTE Dimension = 2;...FORCEINLINE constexpr Vector2 Vector2::operator*(float InScalar) const{ return Vecto..

요약 곱집합 : 두 집합의 원소를 순서쌍으로 묶은 원소의 집합을 의미한다.곱집합의 표현 방식 : (x, y) 데카르트 좌표계 : 직선의 수 집합을 수직으로 배치해 평면을 표기하는 방식.좌표: 데카르트 좌표계의 한 원소를 곱집합과 동일하게 순서쌍으로 표현. 점 또는 원점으로부터 화살표로 표현한다.크기와 방향 두 가지 속성을 지닌다. 벡터 공간 : 두 개 이상의 실수를 곱집합으로 묶어 형성된 집합을 공리적 집합론의 관점에서 규정한 공간.벡터 : 벡터 공간의 원소스칼라 : 체의 구조를 가지는 수 집합의 원소(3차원 공간에서의 벡터, 스칼라 등의 개념은 나중에 다룹니다.) 벡터의 합 : 평면의 점을 각 축에 대해 독립적으로 평행 이동시키는 작업스칼라 곱셈 : 원점을 지나고 벡터와 평행한 직선상에 위치, 항상..

요약 함수란 두 집합 사이의 관계를 나타내는 개념. 두 집합의 요소가 서로 대응된다고 모두 함수로 인정되는 것은 아님.1. 첫 번째 집합의 모든 원소에 대한 대응 관계가 존재해야 한다.2. 첫 번째 집합의 원소는 두 번째 집합의 한 원소에 대응되어야 한다. 정의역(Domain) : 왼쪽에 위치한 첫 번째 집합공역(Codomain) : 오른쪽에 위치한 두 번째 집합 치역(Range) : 정의역에 대응되는 공역의 원소들만 따로 보아 부분 집합을 형성한 것정의역의 모든 원소는 공역의 원소에 대응되어야 한다. 하지만 공역의 모든 원소가 정의역에 대응할 필요는 없다. 정의역과 공역이 서로 대응되는 형태에 따라 함수를 여러 종류로 구분 가능전사 함수 (Surjection) : 공역의 모든 요소가 정의역에 대응..
DX11 을 이용해 엔진을 제작하면서 습득한 지식을 복기한다는 의미로 카테고리 개설이득우의 게임수학 책의 진도를 따라가며 포스팅 예정입니다.
구현은 사실 아주 쉬운 알고리즘입니다. 말 그대로 문제 그대로 구현을 하면 됩니다. 예를 들어서 배열을 회전하라, 스택에 넣어라 하면 말 그대로 rotate 함수를 사용하고 stack.push 등을 하면 되는 것 입니다. 다음과 같이 문자열을 선언하고 아래의 문제를 풀어보겠습니다. string faker = "tunatuna"; Q1. 앞에서부터 세 개의 문자열을 출력하라. Q2. 해당 문자열을 거꾸로 해서 출력하라. Q3. 해당 문자열 끝에 "mistake"이란 문자열을 추가하라. 라고 하면 다음과 같은 코드를 구축해야 합니다. #include using namespace std; string faker = "abcde"; int main() { // 3개 출력 cout