Пример #1
0
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;
};