Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

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;
    }
};
  • No labels