DirectX로 시작하는 3D 게임 프로그래밍(이용희 지음)
해당 영상과 글을 통해 공부하며 정리한 글입니다
3D 그래픽을 공부하려고 보니까 선형대수를 몽땅 잊어먹었다ㅋㄲㄲㅋ 안 웃겨요 . .
그래서 다시 정리하는 벡터와 행렬 !
💠벡터
벡터란 공간상의 한 점 또는 방향과 크기를 표현하는 개념이다.
3차원 벡터는 다음과 같은 자료구조로 표현할 수 있다.
// 3차원 벡터
class CVector
{
public:
float x;
float y;
float z;
};
[1] 벡터의 연산
CVector AddVector3D(CVector A, CVector B)
{
CVector C;
C.x = A.x + B.x;
C.y = A.y + B.y;
C.z = A.z + B.z;
return C;
}
CVector SubtractVector3D(CVector A, CVector B)
{
CVector C;
C.x = A.x - B.x;
C.y = A.y - B.y;
C.z = A.z - B.z;
return C;
}
벡터의 차는 교환법칙이 성립하지 않음!
벡터 A = (x, y, z)의 크기 |A|는
CVector VectorMultiply3D(CVector A, float scalar)
{
CVector C;
C.x = A.x * scalar;
C.y = A.y * scalar;
C.z = A.z * scalar;
return C;
}
벡터의 정규화(Normalization) 단위벡터로 변환하는 것이다. 단위벡터는 벡터의 크기가 1인 벡터!
벡터 A = (x, y, z)의 정규화는
CVector VectorNormalize3D(CVector A)
{
float length = VectorLength3D(A);
A.x = A.x * length;
A.y = A.y * length;
A.z = A.z * length;
return A;
}
[2] 단위 벡터의 응용
벡터의 차를 활용하여 객체 A를 객체 B 방향으로 fDistance만큼의 이동을 나타내는 벡터를 반환하는 함수
CVector MoveObjectFromAToB(CVector vObjA, CVector vObjB, float fDistance)
{
CVector vDirection;
vDirection = vObjB - vObjA;
VectorNormalize3D(vDirection);
vObjA.x += vDirection.x * fDistance;
vObjA.y += vDirection.y * fDistance;
vObjA.z += vDirection.z * fDistance;
return (vObjA);
}
점 A에서 점 B로 객체를 이동할 때, 이동 방향은 (B - A) 벡터의 단위 벡터이다.
[3] 벡터의 내적
여기까지는 기억나서 정리하기 귀찮긴한데.. 내일 추가하겠습니다 ^^7
'STUDY > Game Graphic' 카테고리의 다른 글
[C++ / 3D DirectX] 2. Window Creation & 3. Message Loop/WndProc (0) | 2022.02.14 |
---|---|
[C++ / 3D DirectX] 0. Introduction & 1. WinMain (0) | 2022.02.10 |