1
0
forked from 0ad/0ad

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:
Vladislav Belov 2019-06-05 19:55:37 +00:00
parent dd67d0769e
commit 70ccc3e5cb
2 changed files with 66 additions and 14 deletions

View File

@ -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]);
}
}

View File

@ -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;
};
}