Browse Source

Math: more Frustum data access functions, test for constexprness.

pull/190/head
Vladimír Vondruš 10 years ago
parent
commit
8d1d786698
  1. 18
      src/Magnum/Math/Frustum.h
  2. 37
      src/Magnum/Math/Test/FrustumTest.cpp

18
src/Magnum/Math/Frustum.h

@ -101,6 +101,24 @@ template<class T> class Frustum {
/** @brief Plane at given index */
constexpr Vector4<T> operator[](std::size_t i) const { return _data[i]; }
/** @brief Left plane */
constexpr Vector4<T> left() const { return _data[0]; }
/** @brief Right plane */
constexpr Vector4<T> right() const { return _data[1]; }
/** @brief Bottom plane */
constexpr Vector4<T> bottom() const { return _data[2]; }
/** @brief Top plane */
constexpr Vector4<T> top() const { return _data[3]; }
/** @brief Near plane */
constexpr Vector4<T> near() const { return _data[4]; }
/** @brief Far plane */
constexpr Vector4<T> far() const { return _data[5]; }
private:
Vector4<T> _data[6];
};

37
src/Magnum/Math/Test/FrustumTest.cpp

@ -41,6 +41,8 @@ struct FrustumTest: Corrade::TestSuite::Tester {
void constructCopy();
void constructFromMatrix();
void data();
void compare();
void debug();
@ -57,21 +59,23 @@ FrustumTest::FrustumTest() {
&FrustumTest::constructCopy,
&FrustumTest::constructFromMatrix,
&FrustumTest::data,
&FrustumTest::compare,
&FrustumTest::debug});
}
void FrustumTest::construct() {
Vector4 planes[6]{
{-1.0f, 0.0f, 0.0f, 1.0f},
{ 1.0f, 0.0f, 0.0f, 1.0f},
{ 0.0f, -1.0f, 0.0f, 1.0f},
{ 0.0f, 1.0f, 0.0f, 1.0f},
{ 0.0f, 0.0f, -1.0f, 1.0f},
{ 0.0f, 0.0f, 1.0f, 1.0f}};
constexpr Vector4 planes[6]{
{-1.0f, 2.0f, -3.0f, 0.1f},
{ 1.0f, -2.0f, 3.0f, 0.2f},
{-4.0f, 5.0f, -6.0f, 0.3f},
{ 4.0f, -5.0f, 6.0f, 0.4f},
{-7.0f, 8.0f, -9.0f, 0.5f},
{ 7.0f, 8.0f, 9.0f, 0.6f}};
Frustum frustum{
constexpr Frustum frustum{
planes[0], planes[1],
planes[2], planes[3],
planes[4], planes[5]};
@ -164,6 +168,23 @@ void FrustumTest::constructFromMatrix() {
CORRADE_COMPARE(Frustum::fromMatrix({}), Frustum{});
}
void FrustumTest::data() {
/* Using default-constructed to verify that the planes are in correct order */
constexpr Frustum a;
constexpr Vector4 right = a.planes()[1];
CORRADE_COMPARE(right, (Vector4{-1.0f, 0.0f, 0.0f, 1.0f}));
constexpr Vector4 bottom = a[2];
CORRADE_COMPARE(bottom, (Vector4{0.0f, 1.0f, 0.0f, 1.0f}));
constexpr Vector4 near = a.near();
CORRADE_COMPARE(near, (Vector4{0.0f, 0.0f, 1.0f, 1.0f}));
constexpr Float b = *a.data();
CORRADE_COMPARE(b, 1.0f);
}
void FrustumTest::compare() {
Frustum a{
{-1.0f, 2.0f, -3.0f, 0.1f},

Loading…
Cancel
Save