blob: bf3b0f068bd0168740a5715e97e0ce974c7cdd17 [file] [log] [blame]
#include "RTTL/API/rt.h"
/*! \file newmesh.cxx a simple test program to create a mesh and
supply it with data */
float cube_vertex [8][3] = {
{ -1, -1, -1 },
{ -1, -1, +1 },
{ -1, +1, -1 },
{ -1, +1, +1 },
{ +1, -1, -1 },
{ +1, -1, +1 },
{ +1, +1, -1 },
{ +1, +1, +1 } };
int cube_tris[12][3] = {
// -X : 0,1,2,3; +x : 4,5,6,7
{ 0, 1, 3 },
{ 0, 2, 3 },
{ 4, 5, 7 },
{ 4, 6, 7 },
// -Y : 0,1,4,5: +y : 2,3,6,7
{ 0, 1, 5 },
{ 0, 4, 5 },
{ 2, 3, 7 },
{ 2, 6, 7 },
// -Z : 0,2,4,6: +z : 1,3,5,7
{ 0, 2, 6 },
{ 0, 4, 6 },
{ 1, 3, 7 },
{ 1, 5, 7 }
};
int main(int ac, char **av)
{
try {
rtInit(&ac,av);
/* allocate a new root object to contains "scene graph" */
node_t root = rtNewRoot(RT_HIDDEN);
/* allocate a new triangle mesh as single node in the scene graph*/
mesh_t mesh = rtTriangleMesh(root);
/* allocate vertex array of 3-float vertices (hope the mesh's
implementation likes three-float vertices !)... */
data_t vertex_array = rtNewCoordArray(mesh,RT_FLOAT3);
assert(rtValidData(vertex_array));
/*! ... and write data to it. as vertex array data is same as the
format we write, there's not type conversion, but a single
memcpy */
rtCoords3f(vertex_array,&cube_vertex[0][0],8,RT_PRIVATE);
/*! same for the connectivity data */
data_t index_array = rtNewIndexArray(mesh,RT_INT3);
assert(rtValidData(index_array));
rtIndices3i(index_array,&cube_tris[0][0],12,RT_PRIVATE);
/*! don't do anything with it, just test if we can create it ... */
// test if it arrived in the correct form:
cout << "this should print the 8 vertices of a cube ... (if not, something is broken):" << endl;
vec3f *mapped_vertex = (vec3f*)rtMapBuffer(rtGetMeshCoords(mesh),RT_READ);
for (int i=0;i<8;i++)
cout << "vtx " << i << " : " << mapped_vertex[i] << endl;
rtUnmapBuffer((data_t)mapped_vertex);
rtDestroy(root); // clean up, will also delete
} catch (...) {
cerr << "ERROR: some kind of error has occurred in testing code '" <<__FILE__ << endl;
return 1;
}
return 0;
};