This kind of extensions load geometry just before the render starts. They´re useful to decrease the size of the scene file.
Cube creator
#include <math.h> #include "extensionmanager.h" #include "geometryextension.h" #include "maxwell.h" class CubeExampleExtension : public CgeometryLoaderExtension { DECLARE_EXTENSION_METHODS( "CubeExample", CubeExampleExtension, 1 ) Cmaxwell* pMaxwellLocal; //Handy to access the scene. If you want to use it, fill it in initializeForRendering public: CubeExampleExtension() { getExtensionData()->createDouble( "Cube size", 1.0, 0, 1000 );//Create parameter with Default value } ~CubeExampleExtension() { } bool initializeForRendering ( Cmaxwell* pMaxwell ) { pMaxwellLocal = pMaxwell; return true; } bool loadMesh( Cmaxwell::Cobject &cube ) { //Get the extension parameter getExtensionData()->getDouble( "Cube size", cubeSize ); //Create the mesh cube.initializeMesh( 8, 6, 12, 1 ); //Add the vertices Cpoint point; point.assign( 0.0, 0.0, 0.0 ); cube.setVertex ( 0, 0, point ); point.assign( 0.0, 0.0, cubeSize ); cube.setVertex ( 1, 0, point ); point.assign( cubeSize, 0.0, cubeSize ); cube.setVertex ( 2, 0, point ); point.assign( cubeSize, 0.0, 0.0 ); cube.setVertex ( 3, 0, point ); point.assign( 0.0, cubeSize, 0.0 ); cube.setVertex ( 4, 0, point ); point.assign( 0.0, cubeSize, cubeSize ); cube.setVertex ( 5, 0, point ); point.assign( cubeSize, cubeSize, cubeSize ); cube.setVertex ( 6, 0, point ); point.assign( cubeSize, cubeSize, 0.0 ); cube.setVertex ( 7, 0, point ); //Set some normals Cvector normal; normal.assign( 1.0, 0.0, 0.0 ); cube.setNormal( 0, 0, normal ); normal.assign( -1.0, 0.0, 0.0 ); cube.setNormal( 1, 0, normal ); normal.assign( 0.0, 1.0, 0.0 ); cube.setNormal( 2, 0, normal ); normal.assign( 0.0, -1.0, 0.0 ); cube.setNormal( 3, 0, normal ); normal.assign( 0.0, 0.0, 1.0 ); cube.setNormal( 4, 0, normal ); normal.assign( 0.0, 0.0, -1.0 ); cube.setNormal( 5, 0, normal ); //Add triangles cube.setTriangle ( 0, 0, 2, 1, 3, 3, 3 ); cube.setTriangle ( 1, 0, 3, 2, 3, 3, 3 ); cube.setTriangle ( 2, 4, 5, 6, 2, 2, 2 ); cube.setTriangle ( 3, 4, 6, 7, 2, 2, 2 ); cube.setTriangle ( 4, 2, 3, 7, 0, 0, 0 ); cube.setTriangle ( 5, 2, 7, 6, 0, 0, 0 ); cube.setTriangle ( 6, 0, 1, 5, 1, 1, 1 ); cube.setTriangle ( 7, 0, 5, 4, 1, 1, 1 ); cube.setTriangle ( 8, 1, 2, 6, 4, 4, 4 ); cube.setTriangle ( 9, 1, 6, 5, 4, 4, 4 ); cube.setTriangle ( 10, 0, 4, 7, 5, 5, 5 ); cube.setTriangle ( 11, 0, 7, 3, 5, 5, 5 ); //Generate some uvs dword cchanIdx = 0; dword daChan; cube.addChannelUVW( daChan, cchanIdx ); Cbase projBase; projBase.origin.assign( 0.5, 0.5, 0.5 ); projBase.xAxis.assign( 1.0, 0.0, 0.0 ); projBase.yAxis.assign( 0.0, 1.0, 0.0 ); projBase.zAxis.assign( 0.0, 0.0, 1.0 ); Cvector scale; scale.assign( 0.5, 0.5, 1.0 ); byte sux = cube.generateCubicUVW( cchanIdx, projBase ); return true; } bool getBoundingBox( Cvector &bmin, Cvector& bmax) { bmin.assign( -cubeSize, -cubeSize, -cubeSize ); bmax.assign( cubeSize, cubeSize, cubeSize ); return true; } }; EXPORT_GEOMETRY_LOADER_EXTENSION( CubeExampleExtension )
This class is defined in geometryextension.h
class CgeometryLoaderExtension : public CbaseExtension { public: virtual bool loadMesh( Cmaxwell::Cobject& meshToLoad ) = 0; virtual bool getBoundingBox( Cpoint& min, Cpoint& max ) { return false; }; virtual bool getProxyDisplayPoints( const dword& percent, const dword& maxPoints, dword& nPoints, float*& points ) { return false; }; virtual bool getProxyDisplayLines( const dword& percent, const dword& maxLines, dword& nPoints, float*& points, dword& nLines, dword*& pointsPerLine ) { return false; } virtual bool getProxyDisplayFaces( const dword& percent, const dword& maxFaces, dword& nPoints, float*& points, dword& nFaces, dword*& faces ) { return false; } };