[주의] 공부 중인 자료이므로, 틀릴 가능성이 많아 참고만 하는 것이 좋다
cMatrix cMatrix::View(cVector3 & vEye, cVector3 & vLookAt, cVector3 & vUp, cVector3& vRight)
{
cVector3 l = (vLookAt - vEye).Normalize();
cVector3 r = cVector3::Cross(vUp, l).Normalize();
cVector3 u = cVector3::Cross(l, r).Normalize();
cMatrix viewMat(4);
viewMat.SetData(
r.x, u.x, l.x, 0.f,
r.y, u.y, l.y, 0.f,
r.z, u.z, l.z, 0.f,
-cVector3::Dot(vEye, r), -cVector3::Dot(vEye, u), -cVector3::Dot(vEye, l), 1.f
);
return viewMat;
}
cMatrix cMatrix::Projection(float fFovY, float fAspect, float fNearZ, float fFarZ)
{
float fSy = 1.f / tanf(fFovY / 2.f);
float fSx = fSy / fAspect;
cMatrix projMat(4);
projMat.SetData(
fSx, 0.f, 0.f, 0.f,
0.f, fSy, 0.f, 0.f,
0.f, 0.f, fFarZ / (fFarZ - fNearZ), 1.f,
0.f, 0.f, -(fFarZ * fNearZ) / (fFarZ - fNearZ), 0.f
);
return projMat;
}
cMatrix cMatrix::ViewPort(float x, float y, float w, float h, float minZ, float maxZ)
{
cMatrix vpMat(4);
vpMat.SetData(
w / 2.f, 0.f, 0.f, 0.f,
0.f, -h / 2.f, 0.f, 0.f,
0.f, 0.f, maxZ - minZ, 0.f,
x + w/2.f, y + h/2.f, minZ, 1.f
);
return vpMat;
}
View 행렬 매개변수
1. vEye : 카메라 벡터
2. vLookAt : (0, 0, 1) 월드 내의 카메라가 보는 지점
3. vRight : (1, 0, 0) 벡터
4. vUp : (0, 1, 0) 벡터
Projection 행렬 매개변수
1. fFov : 시야각 수직 영역 : PI(3.14) / 4
2. fAspect : 종횡비 : 스크린 너비 / 스크린 높이
3. fNearZ : 가까운 평면까지의 거리 : 1
4. fFarZ : 먼 평면까지의 거리 : 100
ViewPort 행렬 매개변수
1. x : 0
2. y : 0
3. w : 스크린 너비
4. h : 스크린 높이
---------- 1 ~ 4 항목은 윈도우와의 상대적인 뷰포트의 사각형을 정의하는 것
5. minZ : 최소 깊이 버퍼 값 : 0
6. maxZ : 최대 깊이 버퍼 값 : 1
'Direct3D' 카테고리의 다른 글
[DirectX3D] ASE File 구조 (0) | 2019.09.11 |
---|