diff options
author | Sergeanur <s.anureev@yandex.ua> | 2021-01-20 18:32:03 +0100 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2021-01-20 18:32:03 +0100 |
commit | cc94419a7281fde133a5dc17c46cc62ae061a58c (patch) | |
tree | 300a1e3c7d68e1fe32a3ba4491608bf18a1435b2 /src/core/Camera.cpp | |
parent | free cam inversion fix (diff) | |
parent | Get rid of bitfields in CPool (diff) | |
download | re3-cc94419a7281fde133a5dc17c46cc62ae061a58c.tar re3-cc94419a7281fde133a5dc17c46cc62ae061a58c.tar.gz re3-cc94419a7281fde133a5dc17c46cc62ae061a58c.tar.bz2 re3-cc94419a7281fde133a5dc17c46cc62ae061a58c.tar.lz re3-cc94419a7281fde133a5dc17c46cc62ae061a58c.tar.xz re3-cc94419a7281fde133a5dc17c46cc62ae061a58c.tar.zst re3-cc94419a7281fde133a5dc17c46cc62ae061a58c.zip |
Diffstat (limited to 'src/core/Camera.cpp')
-rw-r--r-- | src/core/Camera.cpp | 45 |
1 files changed, 37 insertions, 8 deletions
diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index 951b7c41..1390d5f2 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -4056,9 +4056,17 @@ CCamera::CalculateDerivedValues(void) bool CCamera::IsPointVisible(const CVector ¢er, const CMatrix *mat) { - RwV3d c; - c = center; - RwV3dTransformPoints(&c, &c, 1, &mat->m_matrix); +#ifdef GTA_PS2 + CVuVector c; + TransformPoint(c, *mat, center); +#else + CVector c = center; + #ifdef FIX_BUGS + c = *mat * center; + #else + RwV3dTransformPoints(&c, &c, 1, (RwMatrix*)mat); + #endif +#endif if(c.y < CDraw::GetNearClipZ()) return false; if(c.y > CDraw::GetFarClipZ()) return false; if(c.x*m_vecFrustumNormals[0].x + c.y*m_vecFrustumNormals[0].y > 0.0f) return false; @@ -4071,9 +4079,17 @@ CCamera::IsPointVisible(const CVector ¢er, const CMatrix *mat) bool CCamera::IsSphereVisible(const CVector ¢er, float radius, const CMatrix *mat) { - RwV3d c; - c = center; - RwV3dTransformPoints(&c, &c, 1, &mat->m_matrix); +#ifdef GTA_PS2 + CVuVector c; + TransformPoint(c, *mat, center); +#else + CVector c = center; + #ifdef FIX_BUGS + c = *mat * center; + #else + RwV3dTransformPoints(&c, &c, 1, (RwMatrix*)mat); + #endif +#endif if(c.y + radius < CDraw::GetNearClipZ()) return false; if(c.y - radius > CDraw::GetFarClipZ()) return false; if(c.x*m_vecFrustumNormals[0].x + c.y*m_vecFrustumNormals[0].y > radius) return false; @@ -4091,11 +4107,24 @@ CCamera::IsSphereVisible(const CVector ¢er, float radius) } bool -CCamera::IsBoxVisible(RwV3d *box, const CMatrix *mat) +#ifdef GTA_PS2 +CCamera::IsBoxVisible(CVuVector *box, const CMatrix *mat) +#else +CCamera::IsBoxVisible(CVector *box, const CMatrix *mat) +#endif { int i; int frustumTests[6] = { 0 }; - RwV3dTransformPoints(box, box, 8, &mat->m_matrix); +#ifdef GTA_PS2 + TransformPoints(box, 8, *mat, box); +#else + #ifdef FIX_BUGS + for (i = 0; i < 8; i++) + box[i] = *mat * box[i]; + #else + RwV3dTransformPoints(box, box, 8, (RwMatrix*)mat); + #endif +#endif for(i = 0; i < 8; i++){ if(box[i].y < CDraw::GetNearClipZ()) frustumTests[0]++; |