DATAKIT API  V2025.1
GLTF Write Sample
//start_of_maingltfmeshwritemain
Dtk_ErrorStatus GltfwTwoMeshes( const Dtk_string& outputFileName )
{ // SAMPLE 1
Dtk_MeshPtr CubeMesh, CylinderMesh;
Dtk_bool useless; // useless for this sample
// Cube Sample
// Cylinder Sample
CylinderMesh = sampleWriter::CreateMeshCylinder( 30 );
// First we initialize writing with name of files and protection fonction if needed (3rd parameter)
Dtk_GltfWriter GW( outputFileName, err );
if( err != dtkNoError )
return err;
// Rootnode creation
GW.OpenInstance( "RootNode", -1, useless );
// from this node, create a Child for the cube, and naming it "Cube"
GW.OpenInstance( "Cube", -1, useless );
// write the cube
GW.WriteMesh( CubeMesh );
// close the cube node
GW.CloseLastInstance();
// from root node again, create a Child for the cylinder, and naming it "Cylinder"
GW.OpenInstance( "Cylinder", -1, useless );
// write the cube
GW.WriteMesh( CylinderMesh );
// close the cube node
GW.CloseLastInstance();
// Rootnode closing.
GW.CloseLastInstance();
return dtkNoError;
}
Dtk_ErrorStatus GltfwInstances( const Dtk_string& outputFileName )
{ // SAMPLE 2
Dtk_MeshPtr CubeMesh;
// Cube Sample
Dtk_transfo cubetransfo;
Dtk_bool useless, isNewNode; // useless pour this sample
// For this sample, we write 10 instances of cube.
// the matrix given is shifted in all iterations
// Inside the for below, we give an ID to OpenInstance. Then we add the cube, and close the child.
// For all others instances, we give the same ID to OpenInstance, and just close the child. Gltf Writer will recognize the ID and automatic reinstance the cube with another matrix.
// First we initialize writing with name of files and protection fonction if needed (3rd parameter)
Dtk_GltfWriter GW( outputFileName, err );
if( err != dtkNoError )
return err;
GW.OpenInstance( "RootNode", -1, useless );
int i;
for( i = 0; i < 10; i++ )
{
GW.OpenInstance( "Cube", 1, isNewNode, cubetransfo ); // Giving ID 1
if( isNewNode )
{
GW.WriteMesh( CubeMesh );
}
GW.CloseLastInstance();
cubetransfo.addTranslate( Dtk_dir( 10, 0, 0 ) ); // shift matrix.
}
GW.CloseLastInstance();
return dtkNoError;
}
int
GltfWriteSample( const Dtk_string &inResultDirectory )
{
Dtk_string outputDirectory, fileName;
cout << endl << "----------------------------------------------" << endl;
// Choosing output directory and file name
outputDirectory = inResultDirectory + L"dtk/Gltf/";
outputDirectory.FixPathSeparator();
outputDirectory.mkdir();
cout << "Gltf Write start" << endl;
cout << "sample 1" << endl;
// sample 1 : just write 2 meshes
fileName = outputDirectory + L"twomeshes.gltf";
Dtk_ErrorStatus errorStatus = GltfwTwoMeshes( fileName );
if( errorStatus == dtkNoError )
cout << "=> " << fileName.c_str() << endl;
else
cout << "error : " << dtkTypeError( errorStatus ).c_str() << endl;
cout << "sample 2" << endl;
// sample 2 : write instances
fileName = outputDirectory + L"instances.gltf";
errorStatus = GltfwInstances( fileName );
if( errorStatus == dtkNoError )
cout << "=> " << fileName.c_str() << endl;
else
cout << "error : " << dtkTypeError( errorStatus ).c_str() << endl;
cout << "Gltf Write end" << endl;
return errorStatus;
}
//end_of_maingltfmeshwrite
GltfWriteSample
int GltfWriteSample(const Dtk_string &inResultDirectory)
Definition: testlibgltfwrite.cpp:91
Dtk_transfo
This is the Transformation dedicated class.
Definition: dtk_transfo.hpp:19
sampleWriter::CreateMeshCube
Dtk_MeshPtr CreateMeshCube()
Mesh Cube sample.
Definition: testcreatemesh.cpp:207
Dtk_GltfWriter
GLTF Writer main class.
Definition: gltfw.hpp:22
Dtk_string
This is a high level string class.
Definition: dtk_string.hpp:58
Dtk_bool
char Dtk_bool
Definition: define.h:725
GltfwTwoMeshes
Dtk_ErrorStatus GltfwTwoMeshes(const Dtk_string &outputFileName)
Definition: testlibgltfwrite.cpp:17
Dtk_ErrorStatus
Dtk_ErrorStatus
Definition: error_dtk.hpp:6
Dtk_SmartPtr
Definition: util_ptr_dtk.hpp:37
dtkTypeError
Dtk_string dtkTypeError(Dtk_Int32 errNumero)
Dtk_string::c_str
const char * c_str() const
Retrieve the ASCII conversion string.
sampleWriter::CreateMeshCylinder
Dtk_MeshPtr CreateMeshCylinder(int nbpoints)
Mesh Cylinder sample.
Definition: testcreatemesh.cpp:337
Dtk_string::mkdir
int mkdir() const
File Utility : Create a Directory.
Dtk_string::FixPathSeparator
void FixPathSeparator()
File Utility : Fixes path separator consistency. It lets you replace the '\' or '/' by the OS needed ...
Dtk_transfo::addTranslate
void addTranslate(const Dtk_dir &V)
Translate the Dtk_transfo.
GltfwInstances
Dtk_ErrorStatus GltfwInstances(const Dtk_string &outputFileName)
Definition: testlibgltfwrite.cpp:57
dtkNoError
@ dtkNoError
Definition: error_dtk.hpp:140
Dtk_dir
This is a mathematical direction class.
Definition: dtk_dir.hpp:15