diff options
author | Sergeanur <s.anureev@yandex.ua> | 2021-01-20 17:59:33 +0100 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2021-01-20 18:20:11 +0100 |
commit | 3b52b683e309a6d8f6f25d29ec5f703984ab2458 (patch) | |
tree | 81fb955754110e5dda1d84fde2e95dc26cafe3b3 /src/core | |
parent | free cam inversion fix (diff) | |
download | re3-3b52b683e309a6d8f6f25d29ec5f703984ab2458.tar re3-3b52b683e309a6d8f6f25d29ec5f703984ab2458.tar.gz re3-3b52b683e309a6d8f6f25d29ec5f703984ab2458.tar.bz2 re3-3b52b683e309a6d8f6f25d29ec5f703984ab2458.tar.lz re3-3b52b683e309a6d8f6f25d29ec5f703984ab2458.tar.xz re3-3b52b683e309a6d8f6f25d29ec5f703984ab2458.tar.zst re3-3b52b683e309a6d8f6f25d29ec5f703984ab2458.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/Camera.cpp | 45 | ||||
-rw-r--r-- | src/core/Camera.h | 6 |
2 files changed, 42 insertions, 9 deletions
diff --git a/src/core/Camera.cpp b/src/core/Camera.cpp index 992c7d74..7a9d3247 100644 --- a/src/core/Camera.cpp +++ b/src/core/Camera.cpp @@ -4055,9 +4055,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; @@ -4070,9 +4078,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; @@ -4090,11 +4106,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]++; diff --git a/src/core/Camera.h b/src/core/Camera.h index 4da7b499..538ff067 100644 --- a/src/core/Camera.h +++ b/src/core/Camera.h @@ -633,7 +633,11 @@ public: bool IsPointVisible(const CVector ¢er, const CMatrix *mat); bool IsSphereVisible(const CVector ¢er, float radius, const CMatrix *mat); bool IsSphereVisible(const CVector ¢er, float radius); - bool IsBoxVisible(RwV3d *box, const CMatrix *mat); +#ifdef GTA_PS2 + bool IsBoxVisible(CVuVector *box, const CMatrix *mat); +#else + bool IsBoxVisible(CVector *box, const CMatrix *mat); +#endif }; VALIDATE_SIZE(CCamera, 0xE9D8); |