void Model3DS::parseObject() { cout << "parseObject" << endl; DWord length = currentChunk.length; Object *object = new Object(textures, currentSelectName++); DWord n = cfg3ds::chunkHeaderSize; n += readString(object->name); cout << "\tname: " << object->name << endl; while (n < length) { readChunkHeader(); n += currentChunk.length; switch (currentChunk.id) { case chunks::OBJECT_MESH: parseMesh(object); break; default: skipChunk(); } } for (int i=0; i<object->numVertices; ++i) object->normals[i].normalize(); objects.push_back(object); }
GeometryPtr parseGeometry(TiXmlElement *g) { GeometryPtr geom; if (!g) return geom; TiXmlElement *shape = g->FirstChildElement(); if (!shape) { logError("Geometry tag contains no child element."); return geom; } std::string type_name = shape->ValueStr(); if (type_name == "sphere") { Sphere *s = new Sphere(); resetPtr(geom,s); if (parseSphere(*s, shape)) return geom; } else if (type_name == "box") { Box *b = new Box(); resetPtr(geom,b); if (parseBox(*b, shape)) return geom; } else if (type_name == "cylinder") { Cylinder *c = new Cylinder(); resetPtr(geom,c); if (parseCylinder(*c, shape)) return geom; } else if (type_name == "mesh") { Mesh *m = new Mesh(); resetPtr(geom,m); if (parseMesh(*m, shape)) return geom; } else { logError("Unknown geometry type '%s'", type_name.c_str()); return geom; } return GeometryPtr(); }
my_shared_ptr<Geometry> parseGeometry(TiXmlElement *g) { my_shared_ptr<Geometry> geom; if (!g) return geom; TiXmlElement *shape = g->FirstChildElement(); if (!shape) { logError("Geometry tag contains no child element."); return geom; } const std::string type_name = shape->ValueTStr().c_str(); if (type_name == "sphere") { Sphere *s = new Sphere(); geom.reset(s); if (parseSphere(*s, shape)) return geom; } else if (type_name == "box") { Box *b = new Box(); geom.reset(b); if (parseBox(*b, shape)) return geom; } else if (type_name == "cylinder") { Cylinder *c = new Cylinder(); geom.reset(c); if (parseCylinder(*c, shape)) return geom; } else if (type_name == "mesh") { Mesh *m = new Mesh(); geom.reset(m); if (parseMesh(*m, shape)) return geom; } else { logError("Unknown geometry type '%s'", type_name.c_str()); return geom; } return my_shared_ptr<Geometry>(); }
void SceneParser::parseObjects(void) { if(currentToken == Scanner::StreamDone) return; else{ while(errorFlag == false && currentToken != Scanner::StreamDone) { acceptToken(Scanner::Id); string tokenText = scanner.tokenText(); if(tokenText == "sphere") parseSphere(); else if(tokenText == "box") parseBox(); else if(tokenText == "plane") parsePlane(); else if(tokenText == "triangle") parseTriangle(); else if(tokenText == "mesh") parseMesh(); else if(tokenText == "cone") parseCone(); else if(tokenText == "cylinder") parseCylinder(); else if(tokenText == "pointlight") parsePointLight(); else if(tokenText == "directionallight") parseDirectionalLight(); else if(tokenText == "spotlight") parseSpotlight(); else if(tokenText == "arealight") parseAreaLight(); else{ error("undefined command: " + tokenText); } advance(); } } }
void LoaderFbx::parseNode(FbxNode* node) { FbxNodeAttribute::EType attributeType; if(node->GetNodeAttribute() == NULL) printf("LoaderFbx::parseNode | NULL Node Attribute \n\n"); else { attributeType = node->GetNodeAttribute()->GetAttributeType(); switch(attributeType) { case FbxNodeAttribute::eMesh: parseMesh(node); break; case FbxNodeAttribute::eSkeleton: break; } } for(int i=0; i<node->GetChildCount(); i++) parseNode(node->GetChild(i)); }
Scene* Parser::parseScene(){ /// xml_node scene = root.child("scene"); // optional name Scene* _s; if (scene.attribute("name") != NULL) _s = new Scene(scene.attribute("name").value()); else _s = Scene::New(); // optional settings xml_node op; op = scene.child("background"); float x, y, z; if (op != NULL) { const char* back = op.text().as_string(); sscanf(back, "%f %f %f", &x, &y, &z); _s->backgroundColor = Color(x, y, z); scene.remove_child("background"); } op = scene.child("ambient"); if (op != NULL) { const char* amb = op.text().as_string(); sscanf(amb, "%f %f %f", &x, &y, &z); _s->ambientLight = Color(x, y, z); scene.remove_child("ambient"); } // processing the objets in the scene xml_object_range<xml_node_iterator> objets = scene.children(); Light* light; for (xml_node_iterator sceneElement = objets.begin(); sceneElement != objets.end(); ++sceneElement) { if (strcmp(sceneElement->name(), "mesh") == 0) _s->addActor(parseMesh(sceneElement)); if (strcmp(sceneElement->name(), "sphere") == 0) _s->addActor(parseSphere(sceneElement)); if (strcmp(sceneElement->name(), "box") == 0) _s->addActor(parseBox(sceneElement)); if (strcmp(sceneElement->name(), "cone") == 0) _s->addActor(parseCone(sceneElement)); if (strcmp(sceneElement->name(), "cylinder") == 0) _s->addActor(parseCylinder(sceneElement)); else if (strcmp(sceneElement->name(), "light") == 0){ light = parseLight(sceneElement); _s->addLight(light); } } return _s; }
Model::Model(std::string fileName) { parseMesh(fileName); }
void AssimpLoader::parseMeshes(aiMesh **meshes, const unsigned int numMeshes, QList<PolygonalDrawable *> &drawables) const { for (unsigned int i = 0; i < numMeshes; i++) drawables.insert(i, parseMesh(*meshes[i])); }