#include <math.h>
#include "extensionmanager.h"
#include "geometryextension.h"
#include "maxwell.h"
using namespace mx;
class CubeExampleExtension : public CgeometryLoaderExtension
{
DECLARE_EXTENSION_METHODS( "CubeExample", CubeExampleExtension, 1 )
Cmaxwell* pMaxwellLocal; //Handy to access the scene.
public: CubeExampleExtension() { getExtensionData()->createDouble( "Cube size", 1.0, 0, 1000 );//Create parameter with Default value
}
~CubeExampleExtension()
{
}
bool initializeForRendering ( Cmaxwell* pMaxwell )
{
pMaxwellLocal = pMaxwell;
return true;
}
//Helper function to spit messages to maxwell.
void printMessage( const char* text, const int code )
{
if( pMaxwellLocal != NULL ) //Helper function to spit messages to maxwell.
void printMessage( const char* text, const int code )
{
if( pMaxwellLocal != NULL )
{
char pMessage[ 1024 ];
sprintf ( pMessage, "[Extension %s] %s", getName(), text );
{ pMaxwellLocal->printMessage( pMessage, code );
char}
pMessage[ 1024 ]; }
public:
CubeExampleExtension()
sprintf ( pMessage, "[Extension %s] %s", getName(), text );
pMaxwellLocal->printMessage( pMessage, code );
}
{
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 )
extern "C" ALWAYSEXPORT int getSdkVersion()
{
return MAXWELL_SDK_VERSION;
}
extern "C" ALWAYSEXPORT int StartExtension( CextensionManager& extensionManager )
{
int i = 0;
if ( extensionManager.registerGeometryLoaderExtension( new CubeExampleExtension ) ) i++;
return i;
}
|