summaryrefslogtreecommitdiff
path: root/unittests/mathlib_test/mathlib_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'unittests/mathlib_test/mathlib_test.cpp')
-rw-r--r--unittests/mathlib_test/mathlib_test.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/unittests/mathlib_test/mathlib_test.cpp b/unittests/mathlib_test/mathlib_test.cpp
new file mode 100644
index 0000000..c3c1191
--- /dev/null
+++ b/unittests/mathlib_test/mathlib_test.cpp
@@ -0,0 +1,79 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+#include "tier0/platform.h"
+#include "mathlib/mathlib.h"
+#include "mathlib/spherical_geometry.h"
+#include "tier2/tier2.h"
+#include "mathlib/halton.h"
+#include "bitmap/float_bm.h"
+#include "tier0/memdbgon.h"
+
+void main(int argc,char **argv)
+{
+ InitCommandLineProgram( argc, argv );
+
+ // 1/8th of the sphere
+ float a1=UnitSphereTriangleArea( Vector( 1, 0, 0 ), Vector( 0, 0, -1 ), Vector( 0, 1, 0 ) );
+ printf( "right spherical triangle projected percentage=%2.4f\n", a1 / ( 4 * M_PI ));
+
+ // a small one
+ Vector v1 = Vector( 1, 0, 0 );
+ Vector v2 = v1 + Vector( 0, 0.2, 0 );
+ Vector v3 = v1 + Vector( 0, 0, 0.2 );
+ v2.NormalizeInPlace();
+ v3.NormalizeInPlace();
+ float a2=UnitSphereTriangleArea( v1, v2, v3 );
+ printf( "small spherical triangle projected percentage=%2.5f\n", a2 / ( 4* M_PI ) );
+
+ // now, create a cubemap and sum the area of each of its cells
+ FloatCubeMap_t envMap( 10, 10 );
+ float flAreaSum = 0.;
+ for( int nFace = 0 ; nFace < 6; nFace ++ )
+ {
+ for( int nY = 0 ; nY < 9; nY++ )
+ for( int nX = 0 ; nX < 9; nX++ )
+ {
+ Vector v00 = envMap.PixelDirection( nFace, nX, nY );
+ Vector v01 = envMap.PixelDirection( nFace, nX, nY + 1 );
+ Vector v10 = envMap.PixelDirection( nFace, nX + 1, nY );
+ Vector v11 = envMap.PixelDirection( nFace, nX + 1 , nY + 1 );
+ v00.NormalizeInPlace();
+ v01.NormalizeInPlace();
+ v10.NormalizeInPlace();
+ v11.NormalizeInPlace();
+ flAreaSum += UnitSphereTriangleArea( v00, v01, v10 );
+ flAreaSum += UnitSphereTriangleArea( v10, v11, v01 );
+ }
+ }
+ printf( "sum of areas of cubemap cells = %2.2f\n", flAreaSum / ( 4.0 * M_PI ) );
+
+#if 0 // visual spherical harmonics as (confusing) point sets
+ // spherical harmonics
+ DirectionalSampler_t sampler;
+ for(int i = 0 ; i < 50000; i++ )
+ {
+ Vector dir=sampler.NextValue();
+ float SH = SphericalHarmonic( 4, 3, dir );
+ float r=0;
+ float g=1; //0.5+0.5*DotProduct( dir, Vector( 0, 0, 1 ) );
+ float b=0;
+ if ( SH < 0 )
+ {
+ SH = -SH;
+ r=g;
+ g=0;
+ }
+ r *= SH;
+ g *= SH;
+ b *= SH;
+ float rad= SH * 4.0; //4.0; //SH *= 8.0;
+ printf( "2\n" );
+ printf( "%f %f %f %f %f %f\n",
+ dir.x * rad, dir.y * rad, dir.z * rad, r, g, b );
+ rad += 0.03;
+ printf( "%f %f %f %f %f %f\n",
+ dir.x * rad, dir.y * rad, dir.z * rad, r, g, b );
+ }
+#endif
+
+}
+