컴퓨터 그래픽스 : 수학/게임 수학

[게임 프로그래머 입문 올인원] 게임수학 : 벡터 (95강)

순정법사 2024.04.11

A. 벡터 

1. 벡터의 기초

a. 스칼라와 벡터

1) 스칼라 : 🌟 고정되어 변하지 않는 값 

 

이런 내용을 스칼라라고 함

 

2) 벡터 : 크기와 방향을 가지고 있음

 

벡터는 위에 화살표가 있음

 

벡터는 시작점이 없고 크기+방향만 가지고 있음

중력, 바람 등 방향을 나타내야하면 거의 벡터를 사용함 

항상 목적지에서 시작점을빼면 값이 나온다!

 

b. 벡터의 특징

1) 벡터 곱셈

 

고정값 k(일반상수)를 곱해준다고 하면 x,y값 각각에 k가 곱해짐

 

2) 벡터끼리의 덧셈과 뺄셈

 

v1 + v2는 v1이 끝나는 곳에서 v2가 시작한다

 

-가 붙으면 반대방향

 

c. 벡터의 법칙

1) 교환법칙

 

v1 + v2 와 v2 + v1은 같다

 

2) 결합법칙 

 

어느걸 먼저 결합하더라도 동일함

 

d. 벡터의 크기 구하기

피타고라스 공식과 동일, 크기라서 절대값 씌워줌

 

정규화 = 단위벡터로 만들고 싶다 = 크기가 1인 벡터로 만들고 싶다

 

위에서 Vab는 5였는데 이 5의 값을 1로 만든다는 소리

즉, 방향만 남기고 싶은 것  

 

Vab를 x라고 한다면, x를 1로 만들기 위해서는 1/x를 곱해야 함

즉, 정규화를 하면 원래 가지고 있던 Vab값에 1/x을 각 x, y값에 곱해준것과 같음 

 

💙 사용할 때

크기는 플레이어끼리 거리를 계산할 때 사용
정규화는 방향은 유지한채 길이만 바꾸고 싶을 때 사용함 (길이는 대부분 플레이어의 속도에 따라 달라짐)

 

e. 벡터의 용도(게임)

위치 벡터는 벡터를 그냥 위치 표현 용도로만 사용 ex) Va(1,1)처럼

 

 

2. 게임에 벡터 더하기

미사일에 유도탄을 넣어서 몬스터를 알아서 따라가는 기능을 구현

 

a. 벡터 생성하기

기본적으로 이렇게 만들 수 있지만

 

크기와 단위벡터 등 정보들을 구하는걸 매번 계산하기 그러니 각 기능들을 추가적으로 넣어줌

 

여기까지가 벡터의 기본 기능

 

Length~ : 벡터의 크기 구하기 / Normalize() : 정규화

 

루트 사용시 cmath 추가

 

lengthSquared() 를 다른 툴에서도 기본 제공을 하는데

이유는 루트가 계산비용이 비싸서 씌우지 않은 버전을 제공하는 것! 

 

이제 포지션은 사용하지 않고 벡터로 사용

 

b. 미사일 유도탄으로 변경하기

1초정도 지나고 유도 미사일이 등장

 

유도탄을 발사하려면 먼저 몬스터를 찾아야 함 

 

미사일에 기본적으로 추적기능을 할 수 있게 정보를 만들어주고

 

Update() 함수에서 타겟 찾기 전후와 0.2초 전후를 구현해주기

 

잘간당!!

 

c. 생포인터의 문제점

특히 위 코드에서는 포인터를 타게팅으로 가지고 있을때의 문제점이 있음

위에선 여러개의 미사일들이 동일한 타게팅을 가지고 있음

 

근데 오브젝트가 충돌되어 바로 삭제되는 코드를 가지고 있는 지금 상황에서는

 

타겟팅이 사라지자 원래 가던방향으로 다시 움직임

 

즉, 날아간 이부분에서 타겟의 GetPos 부분이 실행되고 있음

 

원래 메모리를 날린다고 바로 정보가 없어지는건 아닌 것 처럼 일단은 문제가 없어보이지만

 

💥 만약에 날아간 부분에 다른 메모리가 들어오게 되면 메모리 오염이 일어나면서 크러쉬가 나게됨

 

해결방법 1) 스마트 포인터 : 바로 삭제되지 않으니 메모리 오염 문제에서 벗어남

 

해결방법 2) 오브젝트의 ID

 

타겟이 될 오브젝트는 ID를 따로 설정해준다

 

오브젝트마다 배정된 ID를 가지고 오브젝트 매니저에서 ID로 객체를 찾아서 작업

 

d. 충돌처리 삼각함수에서 벡터로 변경하기

Update함수에서 충돌시 거리를 구하는걸 벡터 방식으로 구하면 이렇게 된다

 

 

 


출처 : https://www.inflearn.com/course/%EA%B2%8C%EC%9E%84-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8-%EC%9E%85%EB%AC%B8-%EC%98%AC%EC%9D%B8%EC%9B%90-rookiss#curriculum

 

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버 -

어디부터 시작할지 막막한 게임 프로그래밍 입문자를 위한 All-In-One 커리큘럼입니다. C++, 자료구조/알고리즘, STL, 게임 수학, Windows API, 게임 서버 입문으로 이어지는 알찬 커리큘럼으로 게임 프

www.inflearn.com