STUDY/Game Graphic
[3D 그래픽의 수학적 기초] 1. 벡터
minari
2022. 2. 14. 22:52
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