Index: ps/trunk/source/graphics/tests/test_Camera.h =================================================================== --- ps/trunk/source/graphics/tests/test_Camera.h +++ ps/trunk/source/graphics/tests/test_Camera.h @@ -57,6 +57,37 @@ CheckFrustumPlanes(camera.GetFrustum(), expectedPlanes); } + void test_frustum_ortho() + { + SViewPort viewPort; + viewPort.m_X = 0; + viewPort.m_Y = 0; + viewPort.m_Width = 512; + viewPort.m_Height = 512; + + CCamera camera; + camera.SetViewPort(viewPort); + camera.LookAlong( + CVector3D(0.0f, 0.0f, 0.0f), + CVector3D(0.0f, 0.0f, 1.0f), + CVector3D(0.0f, 1.0f, 0.0f) + ); + CMatrix3D projection; + projection.SetOrtho(-10.0f, 10.0f, -10.0f, 10.0f, -10.0f, 10.0f); + camera.SetProjection(projection); + camera.UpdateFrustum(); + + const std::vector expectedPlanes = { + CVector4D(1.0f, 0.0f, 0.0f, 10.0f), + CVector4D(-1.0f, 0.0f, 0.0f, 10.0f), + CVector4D(0.0f, 1.0f, 0.0f, 10.0f), + CVector4D(0.0f, -1.0f, 0.0f, 10.0f), + CVector4D(0.0f, 0.0f, 1.0f, 10.0f), + CVector4D(0.0f, 0.0f, -1.0f, 10.0f) + }; + CheckFrustumPlanes(camera.GetFrustum(), expectedPlanes); + } + // Order of planes is unknown. So use interactive checker. void CheckFrustumPlanes(const CFrustum& frustum, const std::vector& expectedPlanes) { @@ -77,7 +108,8 @@ break; } } - TS_ASSERT(found); + if (!found) + TS_FAIL(frustum[i]); } } Index: ps/trunk/source/lib/self_test.h =================================================================== --- ps/trunk/source/lib/self_test.h +++ ps/trunk/source/lib/self_test.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2017 Wildfire Games. +/* Copyright (C) 2019 Wildfire Games. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the @@ -63,43 +63,63 @@ // Perform nice printing of vectors #include "maths/FixedVector3D.h" +#include "maths/Plane.h" #include "maths/Vector3D.h" + namespace CxxTest { - template<> + CXXTEST_TEMPLATE_INSTANTIATION class ValueTraits { - CFixedVector3D v; - std::string str; public: - ValueTraits(const CFixedVector3D& v) : v(v) + ValueTraits(const CFixedVector3D& v) { std::stringstream s; s << "[" << v.X.ToDouble() << ", " << v.Y.ToDouble() << ", " << v.Z.ToDouble() << "]"; - str = s.str(); + m_StringRepr = s.str(); } const char* asString() const { - return str.c_str(); + return m_StringRepr.c_str(); } + private: + std::string m_StringRepr; }; - template<> + CXXTEST_TEMPLATE_INSTANTIATION class ValueTraits { - CVector3D v; - std::string str; public: - ValueTraits(const CVector3D& v) : v(v) + ValueTraits(const CVector3D& v) { std::stringstream s; s << "[" << v.X << ", " << v.Y << ", " << v.Z << "]"; - str = s.str(); + m_StringRepr = s.str(); } const char* asString() const { - return str.c_str(); + return m_StringRepr.c_str(); + } + private: + std::string m_StringRepr; + }; + + CXXTEST_TEMPLATE_INSTANTIATION + class ValueTraits + { + public: + ValueTraits(const CPlane& p) + { + std::stringstream ss; + ss << "CPlane["; + ss << "Norm=" << TS_AS_STRING(p.m_Norm); + ss << ", Dist=" << TS_AS_STRING(p.m_Dist); + ss << "]"; + m_StringRepr = ss.str(); } + const char* asString() const { return m_StringRepr.c_str(); } + private: + std::string m_StringRepr; }; }