void Unit::addModel() { IAnimatedMeshSceneNode* modelNode = Game::getInstance().sceneManager->addAnimatedMeshSceneNode( model, node ); if (modelNode) { modelNode->setMaterialTexture( 0, texture ); modelNode->getMaterial(0).Shininess = 0; modelNode->setScale(vector3df(0.15f, 0.15f, 0.15f) ); modelNode->addShadowVolumeSceneNode(0, 0, false); modelNode->setID(0); currentAnimation = IDLE_ANIMATION; float randX = rand() % 8 - 4; float randZ =rand() % 8 - 4; modelNode->setPosition(vector3df(randX, 0.0f, randZ)); } modelNodes.push_back(modelNode); }
///////////////////////////////////////////函数实现//////////////////////////////////////////////// bool LoadModels(ISceneNode* m_ICamera,std::map<std::string,IAnimatedMeshSceneNode*>& myNode) { _finddata_t file; long longf; //读取文件夹下文件名字 if((longf = _findfirst("..\\model\\*.3ds", &file))==-1l) { std::cout<<"没有找到模型!\n"; } else { std::cout<<"\n加载模型\n"; std::string tempName; tempName = ""; tempName = file.name; m_vecStrModelName.push_back(tempName);//加载第一个模型名字 while( _findnext( longf, &file ) == 0 ) { tempName = ""; tempName = file.name; if (tempName == "..") { continue; } m_vecStrModelName.push_back(tempName); } } _findclose(longf); //模型库模型节点的ID(从1000开始) int storeModelID=1000; //加载模型创建场景节点 auto iter(m_vecStrModelName.begin()); while(iter!=m_vecStrModelName.end()) { std::string myPath=*iter; myPath="..\\model\\"+myPath; scene::IAnimatedMesh* mesh = m_IrrSmgr->getMesh((char*)myPath.c_str()); //模型设为摄像头的子节点 IAnimatedMeshSceneNode* modelNode = m_IrrSmgr->addAnimatedMeshSceneNode(mesh,m_ICamera); // 设置自发光强度大小(即镜面渲染中的亮度大小) modelNode->getMaterial(0).Shininess = 20.0f; modelNode->setMaterialFlag(EMF_LIGHTING, true); modelNode->setRotation(vector3df(90, 0, 0)); modelNode->setPosition(vector3df(90, 0, 0)); //创建三角选择器 m_ItriElector = m_IrrSmgr->createTriangleSelector(modelNode); modelNode->setTriangleSelector(m_ItriElector); m_ItriElector->drop(); // We're done with this m_ItriElector, so drop it now. myNode[(*iter)]=modelNode;//插入模型名字和模型库结点对 iter++; //设置模型为不可见 modelNode->setVisible(false); //设置模型库模型ID modelNode->setID(storeModelID); ++storeModelID; } //计算模型库的页数(三个模型一页) m_iTotalPageNumber=m_vecStrModelName.size()/m_iPageModelCount; if(m_vecStrModelName.size()%m_iPageModelCount!=0) { m_iTotalPageNumber+=1; } //添加翻页标志模型 for(int i=0;i<2;i++) { scene::IAnimatedMesh* mesh; if(0==i) { mesh = m_IrrSmgr->getMesh("left.3ds"); } else { mesh = m_IrrSmgr->getMesh("right.3ds"); } //模型设为摄像头的子节点 IAnimatedMeshSceneNode* modelNode = m_IrrSmgr->addAnimatedMeshSceneNode(mesh,m_ICamera); // 设置自发光强度大小(即镜面渲染中的亮度大小) modelNode->getMaterial(0).Shininess = 20.0f; modelNode->setMaterialFlag(EMF_LIGHTING, true); modelNode->setRotation(vector3df(90, 0, 0)); //创建三角选择器 m_ItriElector = m_IrrSmgr->createTriangleSelector(modelNode); modelNode->setTriangleSelector(m_ItriElector); m_ItriElector->drop(); // We're done with this m_ItriElector, so drop it now. //设置模型为不可见 modelNode->setVisible(false); //设置模型库模型ID if(0==i) { modelNode->setID(2000); } else { modelNode->setID(2001); } } return true; }