Model* DAEFile::model(unsigned int label) { domCOLLADA::domSceneRef scene = root->getScene(); domVisual_scene* vscene = daeSafeCast<domVisual_scene>(scene->getInstance_visual_scene()->getUrl().getElement()); Model* model = new Model(label); domNode_Array nodeArray = vscene->getNode_array(); size_t nodeCount = nodeArray.getCount(); for (int nodei = 0; nodei < nodeCount; nodei++) { domNodeRef domNode = nodeArray.get(nodei); DAENode node = DAENode(domNode); Batch* batch = new Batch(); batch->setScale(node.scale()); if (!node.geometry().material().hasTexture()) { glm::vec4 diffuse = node.geometry().material().diffuse(); batch->setDiffuse(diffuse.r, diffuse.g, diffuse.b, diffuse.a); } else { batch->setTexture(node.geometry().material().diffuseTexture().filename()); } DAEGeometry::VertexList vertices = node.geometry().vertices(); for (DAEGeometry::VertexList::iterator i = vertices.begin(); i != vertices.end(); ++i) { batch->addVertex((*i).x, (*i).y, (*i).z); } DAEGeometry::VertexList normals = node.geometry().normals(); for (DAEGeometry::VertexList::iterator i = normals.begin(); i != normals.end(); ++i) { batch->addNormal((*i).x, (*i).y, (*i).z); } DAEGeometry::VertexList texels = node.geometry().texels(); for (DAEGeometry::VertexList::iterator i = texels.begin(); i != texels.end(); ++i) { batch->addTexel((*i).s, (*i).t); } batch->finalize(); model->addBatch(batch); } return model; };