Ejemplo n.º 1
0
		World(irr::scene::ISceneManager* mgr)
			: IEmptySceneNode(mgr->getRootSceneNode(), mgr, -1, core::vector3df(0,0,0)),
			m_tunnel(this, mgr),
			m_animator(irr::core::vector3df(0,0,1), -400)
		{
			addAnimator(&m_animator);

			m_Instance = this;
		}
Ejemplo n.º 2
0
	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();

	}
		TextureProjectorNode::TextureProjectorNode( Texture* texture, SceneManagerptr sceneManagerPtr, Nodeptr parent )
			:Node(parent , sceneManagerPtr)
		{
			this->texture = texture;
			projectionPolicy = PROJECTION_POLICY_PROJECTOR;
			projectorPosition.x = 15.0f; projectorPosition.y = 16.0f; projectorPosition.z = -12.0f;
			projectorTarget.x = 0.0f; projectorTarget.y = 0.0f; projectorTarget.z = 0.0f;
			projectorUp.x = 0.0f; projectorUp.y =1.0f; projectorUp.z = 0.0f;
			textureProjector = new TextureProjector(sceneManager->getActiveCamera() , projectorPosition, projectorTarget, projectorUp);
			
			projectorUpdator = new ProjectorUpdater(textureProjector);
			
			addAnimator(projectorUpdator);

			projectorTexUnitState = new TextureUnitState(texture);
			projectorTexUnitState->getTextureAttributes()->texture_mode = ETEXM_MODULATE;
			projectorTexUnitState->getTexCoordGeneration()->bEnable = true;
			projectorTexUnitState->getTexCoordGeneration()->texGenMode = ETGM_EYE_LINEAR;
			projectorTexUnitState->getTexCoordGeneration()->texComponentFormat = ETCF_4;
			projectorUpdator->projectorTextureAttributes = projectorTexUnitState->getTextureAttributes();
		    
			Vector3 dir, right, upVector;
			dir.sub( projectorTarget, projectorPosition);
			dir.normalize();
			CameraNode* camera = sceneManager->getActiveCamera();
			float fov = camera->getFOV();
			dir.scale( camera->getNearPlane() );
			Matrix4f& view = textureProjector->getViewMatrix();
			right.x = view.m00; right.y = view.m01;right.z = view.m02; 
			upVector.x = view.m10; upVector.x = view.m11; upVector.x = view.m12;
			float height = 2.0f*camera->getNearPlane()*tan(fov/2.0f);
			float width = height* camera->getAspectRatio();
			width = height = 1.0f;

			n1.x = projectorPosition.x + dir.x + 0.5f*width*right.x + 0.5f*height*upVector.x; 
			n1.y = projectorPosition.y + dir.y + 0.5f*width*right.y + 0.5f*height*upVector.y; 
			n1.z = projectorPosition.z + dir.z + 0.5f*width*right.z + 0.5f*height*upVector.z; 

			n2.x = projectorPosition.x + dir.x + 0.5f*width*right.x - 0.5f*height*upVector.x; 
			n2.y = projectorPosition.y + dir.y + 0.5f*width*right.y - 0.5f*height*upVector.y; 
			n2.z = projectorPosition.z + dir.z + 0.5f*width*right.z - 0.5f*height*upVector.z; 

			n3.x = projectorPosition.x + dir.x - 0.5f*width*right.x + 0.5f*height*upVector.x; 
			n3.y = projectorPosition.y + dir.y - 0.5f*width*right.y + 0.5f*height*upVector.y; 
			n3.z = projectorPosition.z + dir.z - 0.5f*width*right.z + 0.5f*height*upVector.z; 

			n4.x = projectorPosition.x + dir.x - 0.5f*width*right.x - 0.5f*height*upVector.x; 
			n4.y = projectorPosition.y + dir.y - 0.5f*width*right.y - 0.5f*height*upVector.y; 
			n4.z = projectorPosition.z + dir.z - 0.5f*width*right.z - 0.5f*height*upVector.z; 

		}
Ejemplo n.º 4
0
void AbstractHMDSequence::enableCollision()
{
	scene::ITriangleSelector *selector = nullptr;
	irr::scene::IMeshSceneNode *q3node = static_cast<irr::scene::IMeshSceneNode*>(Lib::smgr->getSceneNodeFromId(kIDLevel));
	if(q3node) {
		selector = Lib::smgr->createOctreeTriangleSelector(q3node->getMesh(), q3node, 128);
		q3node->setTriangleSelector(selector);
	}

	auto camera = Lib::smgr->getActiveCamera();
	if(selector) {
		scene::ISceneNodeAnimator *anim = Lib::smgr->createCollisionResponseAnimator(selector, camera, core::vector3df(30, 50, 30), core::vector3df(0, -10, 0), core::vector3df(0, 30, 0));
		selector->drop();
		camera->addAnimator(anim);
		anim->drop();
	}	
}
Ejemplo n.º 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;
}