#include #include using namespace irr; using namespace core; using namespace scene; using namespace video; int main() { video::E_DRIVER_TYPE Driver_Type = video::EDT_OPENGL; IrrlichtDevice *device = createDevice(Driver_Type, core::dimension2d(1024, 768)); if (device==0) return 1; video::IVideoDriver* driver = device->getVideoDriver(); scene::ISceneManager* smgr = device->getSceneManager(); device->getFileSystem()->addZipFileArchive("Data/map-20kdm2.pk3"); //smgr->loadScene("Data/test.irr"); /** scene:: IAnimatedMesh* mesh = smgr->getMesh("20kdm2.bsp"); scene:: ISceneNode* node = 0; if (mesh) node = smgr->addOctTreeSceneNode(mesh->getMesh(0)); if (node) node->setPosition(core::vector3df(1300,-144,-1249)); */ scene::IAnimatedMesh* q3levelmesh = smgr->getMesh("20kdm2.bsp"); scene::ISceneNode* q3node = 0; if (q3levelmesh) q3node = smgr->addOctTreeSceneNode(q3levelmesh->getMesh(0)); scene::ITriangleSelector* selector = 0; if (q3node) { q3node->setPosition(core::vector3df(-1370,-130,-1400)); selector = smgr->createOctTreeTriangleSelector(q3levelmesh->getMesh(0), q3node, 128); q3node->setTriangleSelector(selector); selector->drop(); } scene::ICameraSceneNode* camera = smgr->addCameraSceneNodeFPS(); camera->setPosition(core::vector3df(-53,119,-472)); scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator( selector, camera, core::vector3df(30,20,30),core::vector3df(0,-3,0),core::vector3df(0,50,0)); // camera->addAnimator(anim); anim->drop(); device->getCursorControl()->setVisible(false); mesh = smgr->getMesh("Data/sydney.md2"); node = smgr->addAnimatedMeshSceneNode(mesh); if (node) { node->setMaterialFlag(EMF_LIGHTING, false); ((IAnimatedMeshSceneNode*)node)->setFrameLoop(0, 310); node->setMaterialTexture( 0, driver->getTexture("Data/sydney.bmp") ); } int lastFPS = -1; while(device->run()) { driver->beginScene(true, true, video::SColor(0,200,200,200)); smgr->drawAll(); driver->endScene(); int fps = driver->getFPS(); core::vector3df Temp_vector = camera->getAbsolutePosition(); core::vector3df Last_vector = camera->getAbsolutePosition(); Temp_vector = camera->getAbsolutePosition(); if ((lastFPS != fps) || (Temp_vector.X != Last_vector.X || Temp_vector.Y != Last_vector.Y || Temp_vector.Z != Last_vector.Z)) { core::stringw str = L"Irrlicht Engine ["; str += driver->getName(); str += "] Frames:"; str += fps; str += " FPS Cam Pos. = \""; str += int(Temp_vector.X); str += ", "; str += int(Temp_vector.Y); str += ", "; str += int(Temp_vector.Z); str += "\""; Last_vector.X = Temp_vector.X; Last_vector.Y = Temp_vector.Y; Last_vector.Z = Temp_vector.Z; device->setWindowCaption(str.c_str()); lastFPS = fps; } scene::IBillboardSceneNode * bill = smgr->addBillboardSceneNode(); bill->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR ); bill->setMaterialTexture(0, driver->getTexture("Data/particle.bmp")); bill->setMaterialFlag(video::EMF_LIGHTING, false); bill->setSize(core::dimension2d(20.0f, 20.0f)); core::line3d line; line.start = camera->getPosition(); line.end = line.start + (camera->getTarget() - line.start).normalize() * 1000.0f; core::vector3df intersection; core::triangle3df tri; if (smgr->getSceneCollisionManager()->getCollisionPoint(line, selector, intersection, tri)) { video::SMaterial material; bill->setPosition(intersection); driver->setTransform(video::ETS_WORLD, core::matrix4()); driver->setMaterial(material); driver->draw3DTriangle(tri, video::SColor(0,255,0,0)); } } } // //getTriangles(core::triangle3df* triangles, s32 arraySize, // s32& outTriangleCount, const core::line3d& line, // const core::matrix4* transform=0)