SceneDelegate::SceneDelegate(void) { const unsigned int numberOfMeshes = 4; // use TSL to generate some geometry tsl::IndexedMesh meshes[numberOfMeshes]; tsl::CreateBox( 50, 50, 15, 10, &meshes[0] ); tsl::CreateCube( 5, 2, &meshes[1] ); tsl::CreateCone( 3, 5, 10, &meshes[2] ); tsl::CreateSphere( 3, 10, &meshes[3] ); bool invertNormals[numberOfMeshes] = {true, false, false, false}; // convert TSL geometry into framework format mesh_.resize(numberOfMeshes); for (unsigned int i=0; i<numberOfMeshes; ++i) { const unsigned int numberOfTriangles = tsl::ConvertPolygonsToTriangles(&meshes[i]); const unsigned int numberOfVertices = meshes[i].vertex_array.size(); mesh_[i].vertexArray.assign((const Float3*) &meshes[i].vertex_array.front(), (const Float3*) &meshes[i].vertex_array.back()+1); mesh_[i].normalArray.assign((const Float3*) &meshes[i].normal_array.front(), (const Float3*) &meshes[i].normal_array.back()+1); mesh_[i].indexArray.assign(&meshes[i].index_array.front(), &meshes[i].index_array.back()+1); normalizeMesh(invertNormals[i], &mesh_[i]); } // initialise shapes const unsigned int numberOfShapes = 4; const Float3 shapePositions[numberOfShapes] = { Float3(0, 0, 7.5f), Float3(-8, 0, 2.5f), Float3(0, 0, 0), Float3(8, 0, 3) }; shape_.resize(numberOfShapes); for (unsigned int i=0; i<numberOfShapes; ++i) { shape_[i].meshIndex = i; shape_[i].position = shapePositions[i]; } // initialise lights const unsigned int numberOfLights = 2; light_.resize(numberOfLights); for (unsigned int i=0; i<numberOfLights; ++i) { light_[i].coneAngle = 1; light_[i].direction = Float3(0, 0, -1); light_[i].intensity = 1; } light_[0].intensity = 0.8f; light_[1].position = Float3(-10, -10, 1); light_[1].direction = Float3(0, 1, 0); light_[1].coneAngle = 0.3f; light_[1].intensity = 0.5f; // provide an opportunity for the animation code to modify shapes and lights animate(0); }
void ofApp::drawNormalized(ofxFaceTracker& tracker) { ofClear(0, 0); ofMesh mesh = tracker.getMeanObjectMesh(); normalizeMesh(mesh); mesh.draw(); }