Beispiel #1
0
	void EngineExhaustNode::addNozzle( irr::core::vector3df offset )
	{
		auto fire = SceneManager->addParticleSystemSceneNode(false, this, 0);
		fire->setParticleBehavior( EPB_EMITTER_VECTOR_IGNORE_ROTATION | EPB_EMITTER_FRAME_INTERPOLATION);

		fire->setParticlesAreGlobal(true);

		//Emitter
		auto emitter = fire->createSphereEmitter(
				offset, mRadius, vector3df(0,0,-1), 20, 20,
				SColor(255,255,255,255), SColor(255,255,255,255),
				mParticleLifetime - 100, mParticleLifetime, 5, dimension2df(mParticleSize, mParticleSize), dimension2df( mParticleSize * 1.5, mParticleSize * 1.5));

		fire->setEmitter(emitter);

		fire->addAffector(mFadeOutAffector);
		fire->addAffector(mScaleAffector);

		fire->setMaterialFlag(EMF_LIGHTING, false);
		fire->setMaterialTexture(0, mFireTexture);
		fire->setMaterialType(EMT_TRANSPARENT_ADD_COLOR);
		//fire->setMaterialType( EMT_TRANSPARENT_ALPHA_CHANNEL );

		mFireEmitters.push_back( fire );
	}
	void CMazeGameEngine::addFinishPoint()
	{
		auto prizeLocation = _worldModel.getFinishPoint();
		auto prizeSceneNode = _sceneManager->addBillboardSceneNode(_mazeRootSceneNode, irr::core::dimension2df(0.5f, 0.5f),
			irr::core::vector3df(static_cast<float>(prizeLocation.first) - 0.5f, 0.75f, static_cast<float>(prizeLocation.second) - 0.5f));
		prizeSceneNode->setMaterialFlag(irr::video::EMF_LIGHTING, false);
		prizeSceneNode->setMaterialType(irr::video::EMT_TRANSPARENT_ADD_COLOR);
		prizeSceneNode->setMaterialTexture(0, _videoDriver->getTexture("../media/particle.bmp"));
		_sceneManager->addLightSceneNode(prizeSceneNode, irr::core::vector3df(), irr::video::SColorf(1.0f, 0.0f, 0.5f), 1.0f);
		auto animator = _sceneManager->createFlyCircleAnimator(
			irr::core::vector3df(static_cast<float>(prizeLocation.first) - 0.5f, 0.75f, static_cast<float>(prizeLocation.second) - 0.5f), 0.2f);
		prizeSceneNode->addAnimator(animator);
		animator->drop();
		auto miniPrizeSceneNode = _sceneManager->addBillboardSceneNode(prizeSceneNode, irr::core::dimension2df(0.3f, 0.3f));
		miniPrizeSceneNode->setMaterialFlag(irr::video::EMF_LIGHTING, false);
		miniPrizeSceneNode->setMaterialType(irr::video::EMT_TRANSPARENT_ADD_COLOR);
		miniPrizeSceneNode->setMaterialTexture(0, _videoDriver->getTexture("../media/portal2.bmp"));
		animator = _sceneManager->createFlyCircleAnimator(irr::core::vector3df(), 0.15f,0.015f);
		miniPrizeSceneNode->addAnimator(animator);
		animator->drop();

	}
Beispiel #3
0
void Object::setWireframe(bool value)
{
    setMaterialFlag(GLHCK_MATERIAL_WIREFRAME, value);
}
Beispiel #4
0
void Object::setOBB(bool value)
{
    setMaterialFlag(GLHCK_MATERIAL_DRAW_OBB, value);
}
Beispiel #5
0
int main(int argc, char* argv[]){
    // Check fullscreen
    for (int i=1;i<argc;i++) fullscreen |= !strcmp("-f", argv[i]);

    MyEventReceiver receiver;
    std::shared_ptr<irr::IrrlichtDevice> device(
            createDevice(irr::video::EDT_OPENGL, 
                irr::core::dimension2d<irr::u32>(SCREEN_WIDTH, SCREEN_HEIGHT), 
                16, fullscreen, false, vsync, &receiver),
            [](irr::IrrlichtDevice *p){ p->drop(); }
            );
    receiver.device = device.get();
	auto cursor=device->getCursorControl();
    receiver.cursor = cursor;

    irr::video::IVideoDriver* driver = device->getVideoDriver();
    irr::scene::ISceneManager* smgr = device->getSceneManager();
    irr::gui::IGUIEnvironment* guienv = device->getGUIEnvironment();
    irr::video::IGPUProgrammingServices* gpu = driver->getGPUProgrammingServices();

    HMDDescriptor HMD;
    // Parameters from the Oculus Rift DK1
    HMD.hResolution = 1280;
    HMD.vResolution = 800;
    HMD.hScreenSize = 0.14976;
    HMD.vScreenSize = 0.0936;
    HMD.interpupillaryDistance = 0.064;
    HMD.lensSeparationDistance = 0.064;
    HMD.eyeToScreenDistance = 0.041;
    HMD.distortionK[0] = 1.0;
    HMD.distortionK[1] = 0.22;
    HMD.distortionK[2] = 0.24;
    HMD.distortionK[3] = 0.0;

    HMDStereoRender renderer(device.get(), HMD, 10);

    // load the quake map
    device->getFileSystem()->addFileArchive("../../media/map-20kdm2.pk3");

    irr::scene::IAnimatedMesh* q3levelmesh = smgr->getMesh("20kdm2.bsp");
    irr::scene::IMeshSceneNode* q3node = 0;

    if (q3levelmesh){
        q3node = smgr->addOctreeSceneNode(q3levelmesh->getMesh(0), 0, -1);
	}
	if(!q3node){
		return 1;
	}

    irr::scene::ITriangleSelector* selector = 0;

    if (q3node)
    {
        q3node->setPosition(irr::core::vector3df(-1350,-130,-1400));

        selector = smgr->createOctreeTriangleSelector(
                q3node->getMesh(), q3node, 128);
		if(!selector){
			return 2;
		}
        q3node->setTriangleSelector(selector);
        // We're not done with this selector yet, so don't drop it.
    }

    // Create world
    irr::core::array<irr::SKeyMap> keymaps;
    keymaps.push_back(irr::SKeyMap(irr::EKA_MOVE_FORWARD, irr::KEY_KEY_W));
    keymaps.push_back(irr::SKeyMap(irr::EKA_MOVE_BACKWARD, irr::KEY_KEY_S));
    keymaps.push_back(irr::SKeyMap(irr::EKA_STRAFE_LEFT, irr::KEY_KEY_A));
    keymaps.push_back(irr::SKeyMap(irr::EKA_STRAFE_RIGHT, irr::KEY_KEY_D));
    keymaps.push_back(irr::SKeyMap(irr::EKA_JUMP_UP, irr::KEY_SPACE));
    auto camera= irr::scene::CSceneNodeAnimatorCameraOculusOnFPS::addCameraSceneNodeOclusOnFPS(
            smgr, cursor,
			0, 
                80.0f, .1f, -1, 
                keymaps.pointer(), keymaps.size(), 
                true, .5f, false, true);
    camera->setPosition(irr::core::vector3df(50,50,-60));
    camera->setTarget(irr::core::vector3df(-70,30,-60));
    {
        irr::scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
                selector, camera, 
                irr::core::vector3df(30,50,30),
                irr::core::vector3df(0,-10,0), 
                irr::core::vector3df(0,30,0));
        selector->drop(); // As soon as we're done with the selector, drop it.
        camera->addAnimator(anim);
        anim->drop();  // And likewise, drop the animator when we're done referring to it.
    }

    // load a faerie 
    auto faerie = smgr->getMesh(MEDIA_PATH "faerie.md2");
    auto faerieNode = smgr->addAnimatedMeshSceneNode(faerie);
    faerieNode->setMaterialTexture(0, driver->getTexture(MEDIA_PATH "faerie2.bmp"));
    faerieNode->setMaterialFlag(irr::video::EMF_LIGHTING, false);
    faerieNode->setPosition(irr::core::vector3df(40,190,-1030));
    faerieNode->setRotation(irr::core::vector3df(0,-90,0));
    faerieNode->setMD2Animation(irr::scene::EMAT_SALUTE);

    // load a dwarf
    auto dwarf = smgr->getMesh(MEDIA_PATH "dwarf.x");
    auto dwarfNode = smgr->addAnimatedMeshSceneNode(dwarf);
    dwarfNode->setPosition(irr::core::vector3df(40,-25,20));

    device->getCursorControl()->setVisible(false);

    // Render loop
    irr::core::vector3df rot;
    while(device->run()){
        driver->beginScene(true,true,irr::video::SColor(0,100,100,100));

        renderer.drawAll(smgr);

        // end scene
        driver->endScene();
    }

    return 0;
}
	void CMazeGameEngine::buildMaze()
	{
		LOG(INFO) << "getting the walls" << std::endl;
		auto walls = _worldModel.getMaze().getMazeWalls();

		irr::extra::irr_ptr<irr::scene::CBatchingMesh *> batchingMesh(new irr::scene::CBatchingMesh());
		
		irr::scene::IGeometryCreator const * geometryCreator(_sceneManager->getGeometryCreator());
		irr::extra::irr_ptr<irr::scene::IMesh *> floorTile(geometryCreator->createPlaneMesh(irr::core::dimension2d<irr::f32>(1, 1)));
		floorTile->getMeshBuffer(0)->getMaterial().setTexture(0, _videoDriver->getTexture("..\\media\\floor.jpg"));
		for (unsigned int y = 0; y < _length; ++y)
		{
			for (unsigned int x = 0; x < _width; ++x)
			{
				batchingMesh->addMesh(floorTile.get(),
					irr::core::vector3df(x - 0.5, 0,
					y - 0.5));
			}
		}
		irr::extra::irr_ptr<irr::scene::IMesh *> horizontalBoundingWall(geometryCreator->createCubeMesh(irr::core::vector3df(0.9f, 1.5f, 0.1f)));
		irr::extra::irr_ptr<irr::scene::IMesh *> verticalBoundingWall(geometryCreator->createCubeMesh(irr::core::vector3df(0.1f, 1.5f, 0.9f)));
		auto wallTexture = _videoDriver->getTexture("../media/t351sml.jpg");
		horizontalBoundingWall->getMeshBuffer(0)->getMaterial().setTexture(0, wallTexture);
		verticalBoundingWall->getMeshBuffer(0)->getMaterial().setTexture(0, wallTexture);
		float horizontalWallOffsetX = -0.45f;
		float horizontalWallOffsetY = -0.95f;
		float verticalWallOffsetX = -0.95f;
		float verticalWallOffsetY = -0.45f;
		//add maze bounding walls
		for (unsigned int x = 0; x < _width; ++x)
		{
			batchingMesh->addMesh(horizontalBoundingWall.get(), irr::core::vector3df(x + horizontalWallOffsetX, 0, horizontalWallOffsetY));
			batchingMesh->addMesh(horizontalBoundingWall.get(), irr::core::vector3df(x + horizontalWallOffsetX, 0, horizontalWallOffsetY + _length));
		}
		for (unsigned int y = 0; y < _length; ++y)
		{
			batchingMesh->addMesh(verticalBoundingWall.get(), irr::core::vector3df(verticalWallOffsetX, 0, y + verticalWallOffsetY));
			batchingMesh->addMesh(verticalBoundingWall.get(), irr::core::vector3df(verticalWallOffsetX + _width, 0, y + verticalWallOffsetY));
		}

		//add all other maze walls
		for (const auto & wall : walls)
		{
			int dx = wall.x2 - wall.x1;
			int dy = wall.y2 - wall.y1;
			if (dx) //check if horizontal wall
			{
				for (auto x = 0; x < dx; ++x)
					batchingMesh->addMesh(horizontalBoundingWall.get(), irr::core::vector3df(x + wall.x1 + horizontalWallOffsetX, 0,
					wall.y1 + horizontalWallOffsetY));
			}
			else //or vertical wall
			{
				for (auto y = 0; y < dy; ++y)
					batchingMesh->addMesh(verticalBoundingWall.get(), irr::core::vector3df(wall.x1 + verticalWallOffsetX, 0,
					y + wall.y1 + verticalWallOffsetY));
			}
		}
		batchingMesh->update();
		auto floorNode = _sceneManager->addMeshSceneNode(batchingMesh.get(), _sceneManager->getRootSceneNode(), 0);
		//floorNode->setTriangleSelector(_sceneManager->createOctreeTriangleSelector(batchingMesh.get(),floorNode));
		floorNode->setMaterialFlag(irr::video::EMF_FOG_ENABLE, true);
		//floorNode->setMaterialType(irr::video::EMT_PARALLAX_MAP_SOLID);
		_mazeRootSceneNode = floorNode;
	}