SceneObject* PhysicsSim::loadSceneObject(stringw mesh_file, stringw texture_file) { IAnimatedMesh *mesh = smgr->getMesh(mediaDirectory + mesh_file); IAnimatedMeshSceneNode* Node = smgr->addAnimatedMeshSceneNode(mesh, smgr->getRootSceneNode()); stringw tex_file = texture_file; if(tex_file == L"") { tex_file = mesh_file; if(tex_file.find(".dae") > -1) tex_file.remove(".dae"); if(tex_file.find(".3ds") > -1) tex_file.remove(".3ds"); tex_file.append(".jpg"); } tex_file = mediaDirectory + tex_file; if(smgr->getFileSystem()->existFile(tex_file)) Node->setMaterialTexture(0, driver->getTexture(tex_file)); Node->setMaterialFlag(EMF_LIGHTING, true); Node->setMaterialFlag(EMF_TEXTURE_WRAP, false); Node->setMaterialFlag(EMF_BACK_FACE_CULLING, true); Node->addShadowVolumeSceneNode(0,-1,false); Node->getMaterial(0).AmbientColor.set(255,255,255,255); updateObjects(); return Node; }
IAnimatedMeshSceneNode* MyIrrlichtComposition::mLoadMesh(vector3df pos,vector3df rot,vector3df scale, std::string name1, std::string name2) { IAnimatedMeshSceneNode* obj = smgr->addAnimatedMeshSceneNode(smgr->getMesh(name1.c_str())); if(obj) { obj->setPosition(pos); obj->setMD2Animation(scene::EMAT_RUN); obj->setRotation(rot); obj->setScale(scale); obj->setMaterialTexture(0, driver->getTexture(name2.c_str())); obj->addShadowVolumeSceneNode(); return obj; } else exit(2); }
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 PhysicsSim::loadPhysicalObjects(PhysicalStructure &structure, stringc mesh_filename, Vector3D position, bool lock2d) { stringc physics_filename = mesh_filename; physics_filename.remove(".dae"); physics_filename.append(".bullet"); physics_filename = mediaDirectory + physics_filename; if(smgr->getFileSystem()->existFile(physics_filename)) { stringw collada_filename = smgr->getFileSystem()->getAbsolutePath(mediaDirectory) + mesh_filename; if(smgr->getFileSystem()->existFile(collada_filename)) { btBlenderImporter* fileLoader = new btBlenderImporter(position); fileLoader->loadFile(physics_filename.c_str()); smgr->getMesh(collada_filename); for(int i = 0; i < fileLoader->getNumRigidBodies(); i++) { btRigidBody* rb = (btRigidBody*)fileLoader->getRigidBodyByIndex(i); if(lock2d) { rb->setLinearFactor(btVector3(1,0,1)); rb->setAngularFactor(btVector3(0,1,0)); } stringc meshname(fileLoader->getNameForPointer(rb)); stringc bodyname = meshname; stringc tex_file = meshname; s32 underline = tex_file.findFirst('_'); if(underline < 0) underline = tex_file.findFirst('.'); if(underline > -1) tex_file = tex_file.subString(0, underline+1); tex_file = mediaDirectory + tex_file + ".jpg"; if(fileLoader->getNumRigidBodies() > 1) meshname = collada_filename + "#" + meshname + "-mesh"; else meshname = collada_filename; IAnimatedMesh *mesh = smgr->getMeshCache()->getMeshByName(meshname); if(mesh){ IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode(mesh, smgr->getRootSceneNode()); node->setMaterialFlag(EMF_LIGHTING, true); node->setMaterialFlag(EMF_TEXTURE_WRAP, false); node->setMaterialFlag(EMF_BACK_FACE_CULLING, false); node->addShadowVolumeSceneNode(0,-1,false); if(smgr->getFileSystem()->existFile(tex_file)) { node->setMaterialTexture(0, driver->getTexture(tex_file)); } PhysicalObject* pobj = new PhysicalObject(node, rb, bodyname); objects_list.push_back(pobj); structure.bodies.push_back(pobj); dynamicsWorld->addRigidBody(pobj->getRigidBody()); } } for(int i = 0; i < fileLoader->getNumConstraints(); i++) { Joint* jt = new Joint(fileLoader->getConstraintByIndex(i)); joints_list.push_back(jt); structure.joints.push_back(jt); btTypedConstraint* constr = jt->getConstraint(); dynamicsWorld->addConstraint(constr, true); } delete fileLoader; updateObjects(); return true; } } return false; }