This kind of extensions load geometry just before the render starts. They´re useful to decrease the size of the scene file and even to create loaders for new file formats. This class is defined in geometryextension.h. The most important part of the extension functionality is done in loadMesh
Code Block |
---|
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;
}
}; |
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#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
Code Block |
---|
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; } }; |