뷰 좌표계란
- 월드를 카메라를 기준으로 본 좌표계
1. 카메라의 오일러 회전 값을 알고있는 경우.
- 카메라의 회전 행렬 (TMatrix)구하고
- 카메라의 이동행렬(RMatrix)도 구한다
- ViewMatrix = TMatrix * RMatrix (역행렬)
2. 카메라가 향해야 하는 물체의 위치를 알고 있는 경우(Look At)
1. (목표물 - 카메라)를 정규화하여 Forward벡터를 구한다.
2. Forward벡터와 월드의 Up(0,1,0)을 외적하여 Right벡터도 구해준다.
3. 얻은 Forward벡터와 Right벡터를 외적하면 카메라의 Up벡터도 구할 수 있다.
출처 : http://blog.naver.com/destiny9720/221423054915
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
Matrix4x4 Camera::GetViewMatrix(GameObject & InTargetObject) const
{
//목표물 - 카메라를 정규화 해 viewZ 벡터를 구한다.
Vector3 viewZ = (Transform.Position - InTargetObject.GetTransform().Position).Normalize();
//월드의 Up벡터와 아까구한 viewZ벡터를 외적하여 viewX벡터를 구한다.
Vector3 viewX = Vector3::UnitY.Cross(viewZ).Normalize();
if (viewX.IsZero())
{
viewX = Vector3::UnitX;
}
//viewZ벡터와 viewX벡터를 외적해 나머지 viewY벡터도 구한다
Vector3 viewY = viewZ.Cross(viewX).Normalize();
//viewX, viewY, viewZ를 이용하여 rotation 행렬을 만들어주고
Matrix4x4 virMat = Matrix4x4(Vector4(viewX, false), Vector4(viewY, false), Vector4(viewZ, false), Vector4::UnitW).Tranpose();
//뷰 좌표계므로 Translate행렬에 포지션 값은 -를 해준다.
Matrix4x4 vitMat = Matrix4x4(Vector4::UnitX, Vector4::UnitY, Vector4::UnitZ, Vector4(-Transform.Position));
//행렬은 SRT순으로 곱해야하는데 뷰 좌표계엔 Scale값은 필요 없으므로 R*T를 해준다.
return virMat * vitMat;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
내적을 사용한 시야 판별 (0) | 2019.12.19 |
---|---|
평면의 방정식과 D의 의미 (0) | 2019.12.19 |
오일러각 입력에 따라 Forward, Up, Right 벡터를 구하고 이를 토대로 3차원 회전 행렬 구하기 (0) | 2019.12.19 |
투영벡터 (0) | 2019.12.19 |
왼손좌표계와 오른손 좌표계 (0) | 2019.12.19 |