Adds Camera test for ortho projection.
Reviewed By: wraitii Differential Revision: https://code.wildfiregames.com/D1948 This was SVN commit r22340.
This commit is contained in:
parent
dd67d0769e
commit
70ccc3e5cb
@ -57,6 +57,37 @@ public:
|
||||
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<CPlane> 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<CPlane>& expectedPlanes)
|
||||
{
|
||||
@ -77,7 +108,8 @@ public:
|
||||
break;
|
||||
}
|
||||
}
|
||||
TS_ASSERT(found);
|
||||
if (!found)
|
||||
TS_FAIL(frustum[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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 @@ namespace CxxTest
|
||||
|
||||
// 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>
|
||||
{
|
||||
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>
|
||||
{
|
||||
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<CPlane>
|
||||
{
|
||||
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;
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user