void loop() { lBreak(); sM(); sE(); sR(); sR(); sY(); wBreak(); sC(); sH(); sR(); sI(); sS(); sT(); sM(); sA(); sS(); lBreak(); }
// identifierar alla mesharna i scenen och extraherar data fr�n dem bool Exporter::IdentifyAndExtractMeshes() { UINT index = 0; scene_.meshes.clear(); //itererar �ver DG:n och lagrar rgba-v�rden och texturnamn i ett tempor�rt material material tempmaterial; MItDependencyNodes matIt(MFn::kLambert); MString aC("ambientColor"), dC("color"), sC("specularColor"), gC("incandescence"), tC("transparency"); while (!matIt.isDone()){ if (matIt.item().hasFn(MFn::kPhong)) { MFnPhongShader tempphong(matIt.item()); tempmaterial.type = PHONG; extractColor(tempmaterial.ambient, tempphong, aC); extractColor(tempmaterial.diffuse, tempphong, dC); extractColor(tempmaterial.specular, tempphong, sC); extractColor(tempmaterial.glow, tempphong, gC); extractColor(tempmaterial.transparency, tempphong, tC); } else if (matIt.thisNode().hasFn(MFn::kBlinn)) { MFnBlinnShader tempblinn(matIt.item()); tempmaterial.type = BLINN; extractColor(tempmaterial.ambient, tempblinn, aC); extractColor(tempmaterial.diffuse, tempblinn, dC); extractColor(tempmaterial.specular, tempblinn, sC); extractColor(tempmaterial.glow, tempblinn, gC); extractColor(tempmaterial.transparency, tempblinn, tC); } else if (matIt.item().hasFn(MFn::kLambert)) { MFnLambertShader templamb(matIt.item()); tempmaterial.type = LAMBERT; extractColor(tempmaterial.ambient, templamb, aC); extractColor(tempmaterial.diffuse, templamb, dC); extractColor(tempmaterial.specular, templamb, sC); extractColor(tempmaterial.glow, templamb, gC); extractColor(tempmaterial.transparency, templamb, tC); } else printf("No material found\n"); scene_.materials.push_back(tempmaterial); matIt.next(); } //Turn off or on Blendshapes matIt.reset(MFn::kBlendShape); while (!matIt.isDone()) { MFnBlendShapeDeformer bs(matIt.item()); //Get the envelope attribute plug MPlug pl = bs.findPlug("en"); //Set the 0 to disable FFD effect, enable by setting it to 1: pl.setValue(1.0f); matIt.next(); } //Get Actual Blendshapes matIt.reset(MFn::kBlendShape); while (!matIt.isDone()) { MFnBlendShapeDeformer bs(matIt.item()); MObjectArray base_objects; //print blend shape name cout << "Blendshape " << bs.name().asChar() << endl; //Get a list of objects that this blend shape deforms bs.getBaseObjects(base_objects); cout << "NumBaseOBjects " << base_objects.length() << endl; //loop through each blendshaped object for (int i = 0; i < base_objects.length(); ++i) { //Get the base shape MObject Base = base_objects[i]; //Output all of the target shapes and weights OutputBlendShapes(bs, Base); } //Get next blend shapes matIt.next(); } MDagPath dag_path; MItDag dag_iter(MItDag::kBreadthFirst, MFn::kMesh); while (!dag_iter.isDone()) { if (dag_iter.getPath(dag_path)) { MFnDagNode dag_node = dag_path.node(); // vill endast ha "icke-history"-f�rem�l if (!dag_node.isIntermediateObject()) { // triangulera meshen innan man h�mtar punkterna MFnMesh mesh(dag_path); ExtractMeshData(mesh, index); index++; } } dag_iter.next(); } MItDependencyNodes it(MFn::kSkinClusterFilter); for (; !it.isDone(); it.next()) { MObject object = it.item(); OutputSkinCluster(object); } //Hitta kamera data dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kCamera); while (!dag_iter.isDone()) { extractCamera(dag_iter.item()); dag_iter.next(); } //itererar dag och s�ker data f�r tillg�ngliga ljus //om ej ljus finns i scenen ignoreras denna iteration f�r sagda scen. dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kLight); while (!dag_iter.isDone()) { //funktion till v�r iterator MFnLight func(dag_iter.item()); //namn: export_stream_ << "Light: " << func.name().asChar() << std::endl; //kalla p�EextractLight function extractLight(dag_iter.item()); //vidare till n�sta ljus i dag'en dag_iter.next(); /* if (dag_iter.getPath(dag_path)) { auto test = dag_path.fullPathName(); export_stream_ << "light: " << test << std::endl; } dag_iter.next(); */ } dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kJoint); while (!dag_iter.isDone()) { if (dag_iter.getPath(dag_path)) { MFnDagNode dag_node = dag_path.node(); if (!dag_node.isIntermediateObject()) { extractJointData(dag_path); } } dag_iter.next(); } int breadth=0; dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kTransform); while (!dag_iter.isDone()) { int depth = dag_iter.depth(); if (depth > 1) break; if (dag_iter.getPath(dag_path)) { createSceneGraph(MFnDagNode(dag_path),-1); } breadth++; dag_iter.next(); } /* //general purpose iterator, sista argument �r filtret dag_iter.reset(dag_iter.root(), MItDag::kBreadthFirst, MFn::kLight); while (!dag_iter.isDone()) { if (dag_iter.getPath(dag_path)) { } dag_iter.next(); } */ return true; }