예제 #1
0
bool ObjectFatty::createBodyAtPosition( cocos2d::CCPoint position )
{
	// Player physical body
	b2dJson json;

	m_body = json.j2b2Body( physicsWorld(), prototype() );
	if( ! m_body || ! m_body->GetFixtureList() ) {
		std::cout << "Simple inventory item prototype messed up" << std::endl;
		return false;
	}
	m_body->SetUserData( this );
	m_body->SetTransform( b2Vec2(position.x/PTM_RATIO, position.y/PTM_RATIO), m_body->GetAngle() );
	setPosition(position);
	
	b2BodyDef bodyDef;
    bodyDef.type = b2_dynamicBody;
    bodyDef.fixedRotation = true;
	m_contactSensor = physicsWorld()->CreateBody(&bodyDef);
	m_contactSensor->SetTransform( b2Vec2(position.x/PTM_RATIO, position.y/PTM_RATIO), m_body->GetAngle() );
	
	m_bodies.push_back( m_contactSensor );
	m_bodies.push_back( m_body );

	
	b2RevoluteJointDef md;
	md.Initialize(m_body, m_contactSensor, m_body->GetPosition());
	md.maxMotorTorque = 200;
	md.enableMotor = true;
	m_motorJoint = (b2RevoluteJoint *)GameWorld::sharedGameWorld()->physicsWorld->CreateJoint(&md);
	
	saveOriginalProperties();
	return true;
}
예제 #2
0
//////////////////////////////////////////////////// 
// Creates a dummy sensor object to check collisions
// with other objects
//////////////////////////////////////////////////// 
bool ObjectGlue::createBodyAtPosition( cocos2d::CCPoint position )
{
	b2dJson json;
	m_body = json.j2b2Body( physicsWorld(), prototype() );
	if( ! m_body || ! m_body->GetFixtureList() ) {
		std::cout << "Glue inventory item prototype messed up" << std::endl;
		return false;
	}
	m_body->SetUserData(this);
	m_body->SetTransform( b2Vec2(position.x/PTM_RATIO, position.y/PTM_RATIO), m_body->GetAngle() );
	setPosition(position);

	m_bodies.push_back( m_body );

	saveOriginalProperties();
	return true;
}
예제 #3
0
int main(int argc, char** argv)
{
    //Matrix4x4f mat = Matrix4x4f::PerspectiveProjection(90, 0.1, 100, 1.f/1.f);
    //assert((mat * Matrix4x4f()) == mat); //works :)

    if(1) //actual game
    {
        WAAF level;
        if(!level.LoadFromFile("../data/level1.waa"))
        {
            std::cerr<<"Could not load data/level1.waa"<<std::endl;
            system("pause");
            return 0;
        }
        Player player;
        player.position = level.GetPlayerPos();

        //    Physics Setup

        //collision configuration contains default setup for memory, collision setup
        btDefaultCollisionConfiguration collisionConfiguration;
        //use the default collision dispatcher. For parallel processing you can use a diffent dispatcher (see Extras/BulletMultiThreaded)
        btCollisionDispatcher collisionDispatcher(&collisionConfiguration);
        btDbvtBroadphase broadphase;
        //the default constraint solver. For parallel processing you can use a different solver (see Extras/BulletMultiThreaded)
        btSequentialImpulseConstraintSolver solver;
        //create physics world
        btDiscreteDynamicsWorld physicsWorld(&collisionDispatcher, &broadphase, &solver, &collisionConfiguration);

        //stuff copied from bullet samples
        physicsWorld.getSolverInfo().m_splitImpulse=true;
        physicsWorld.getSolverInfo().m_numIterations = 20;
        //set gravity
        physicsWorld.setGravity(btVector3(0,-10,0));

        btRigidBody levelBody(btRigidBody::btRigidBodyConstructionInfo(0.f, NULL, level.GetPhysMesh()));
        physicsWorld.addRigidBody(&levelBody);

        btRigidBody::btRigidBodyConstructionInfo playerBodyInfo(10.f, NULL, &player.physShape);
        playerBodyInfo.m_startWorldTransform.setOrigin(btVector3(player.position.X, player.position.Y, player.position.Z));
        btRigidBody playerBody(playerBodyInfo);
        physicsWorld.addRigidBody(&playerBody);

        //    Console Setup

        if(!Console::Init())
        {
            std::cerr<<"Could not initialize console!"<<std::endl;
            system("pause");
            return 0;
        }

        //    Renderer Setup

        static const float FOV = 90;
        static const float NEAR_CLIP = .1f;
        static const float FAR_CLIP = 100.f;
        AsciiRenderer renderer;
        {
            float width = Console::GetWidth();
            float height = Console::GetHeight() - 1; //cannot use last line due to end-of-line cursor wrap
            if(!renderer.Init(width, height, FOV, NEAR_CLIP, FAR_CLIP))
            {
                std::cerr<<"Could not initialize renderer!"<<std::endl;
                Console::Destroy();
                system("pause");
                return 0;
            }
        }

        //    Main Loop

        renderer.ApplyModelviewMatrix(Matrix4x4f::Translation(level.GetPlayerPos()));

        bool running = true; //the game, not the player (I lost the game -.-)
        //movement keys
        bool moveForward = false;
        bool moveLeft = false;
        bool moveRight = false;
        bool moveBack = false;
        bool moveUp = false; //aka jump
        bool menu = true;
        ShowMenu(); //initial render
        unsigned long long lastFrameTime = GetTimeMS();
        float pitch = 0.f; //in rad
        float yaw = 0.f;
        float mouseScaleX = .05f / 180.f * 3.1415f;
        float mouseScaleY = -.05f / 180.f * 3.1415f;
        float movespeed = 1.f;

        while(running)
        {
            MouseMoveEvent mouseMove;
            mouseMove.X = 0;
            mouseMove.Y = 0;
            //    Event Loop
            Event ev;
            while(Console::PollEvent(ev))
            {
                switch(ev.Type)
                {
                case KeyPressed:
                {
                    switch(ev.Key.Code)
                    {
                    case KEYCODE_ESCAPE: // quit on escape pressed
                    {
                        if(menu)
                        {
                            running = false;
                        }
                        else
                        {
                            menu = true;
                            ShowMenu();
                        }
                        break;
                    }
                    case KEYCODE_RETURN:
                    {
                        menu = false;
                        break;
                    }
                    case KEYCODE_W:
                    {
                        moveForward = true;
                        break;
                    }
                    case KEYCODE_A:
                    {
                        moveLeft = true;
                        break;
                    }
                    case KEYCODE_S:
                    {
                        moveBack = true;
                        break;
                    }
                    case KEYCODE_D:
                    {
                        moveRight = true;
                        break;
                    }
                    case KEYCODE_SPACE:
                    {
                        moveUp = true;
                        break;
                    }
                    default:
                    {
                        break;
                    }
                    }
                    break;
                }
                case KeyReleased:
                {
                    switch(ev.Key.Code)
                    {
                    case KEYCODE_W:
                    {
                        moveForward = false;
                        break;
                    }
                    case KEYCODE_A:
                    {
                        moveLeft = false;
                        break;
                    }
                    case KEYCODE_S:
                    {
                        moveBack = false;
                        break;
                    }
                    case KEYCODE_D:
                    {
                        moveRight = false;
                        break;
                    }
                    default:
                    {
                        break;
                    }
                    }
                    break;
                }
                case Resized: // change resolution when window resized
                {
                    if(!renderer.Init(ev.Resize.SizeX, ev.Resize.SizeY - 1, FOV, NEAR_CLIP, FAR_CLIP))
                    {
                        std::cerr << "Could not change resolution!" << std::endl;
                        Console::Destroy();
                        system("pause");
                        return 0;
                    }
                    break;
                }
                case MouseMoved:
                {
                    mouseMove = ev.MouseMove;
                    break;
                }
                case MouseButtonPressed:
                {
                    break;
                }
                case MouseButtonReleased:
                {
                    break;
                }
                case MouseWheelMoved:
                {
                    break;
                }
                default:
                {
                    break;
                }
                }
            } //end event loop

            //    Game Logic
            unsigned long long frameTime = GetTimeMS();
            unsigned int deltaT = frameTime - lastFrameTime;
            lastFrameTime = frameTime;

            if(menu)
            {
                //no logic required in menu, just await events
            }
            else
            {
                yaw += mouseMove.X * mouseScaleX;
                pitch += mouseMove.Y * mouseScaleY;
                while(yaw > 360.f/ 180.f * 3.1415f) yaw -= 360.f/ 180.f * 3.1415f;
                while(yaw < 0.f) yaw += 360.f;
                //clip pitch to [-90°, 90°]
                if(pitch < -3.1415f/2.f) pitch = -3.1415f/2.f;
                if(pitch > 3.1415f/2.f) pitch = 3.1415f/2.f;

                //  move mouse cursor back to 100, 100 and queue mouse moves
                Console::Update();
                if(deltaT > 0)
                {
                    physicsWorld.stepSimulation(deltaT); //should ideally be fixed - cba
                    //todo: updating goes here
                }

                btVector3 moveDir = CalculateMoveDir(moveLeft, moveForward, moveRight, moveBack, yaw);
                moveDir = moveDir * deltaT * movespeed;
                //playerBody.applyCentralForce(moveDir);
            }

            //    Rendering
            if(menu)
            {
                //menu is fixed, no rendering required
                Sleep(5);
            }
            else
            {
                Matrix4x4f posMat;
                posMat._14 = -playerBody.getWorldTransform().getOrigin().x();
                posMat._24 = -playerBody.getWorldTransform().getOrigin().y();
                posMat._34 = -playerBody.getWorldTransform().getOrigin().z();
                renderer.SetModelviewMatrix(Matrix4x4f());
                renderer.ApplyModelviewMatrix(Matrix4x4f::SimpleRotation(pitch , yaw));
                renderer.ApplyModelviewMatrix(posMat);
                // clear
                renderer.ClearDepth();
                renderer.ClearColor();
                // render
                level.Render(renderer);
                // "switch buffers"
                std::stringstream ss;
                char const * const * const colBuf = renderer.GetColorBuffer();
                for(unsigned int y = 0; y < renderer.GetHeight(); ++y)
                {
                    ss << std::string(colBuf[y], renderer.GetWidth());// << "\n"; //if width is not correct
                }
                Console::GotoXY(0, 0);
                Console::Write(ss.str());
            }
        }

        Console::Destroy();

        return 0;
    }
}
예제 #4
0
bool Scene::loadMap()
{
    // chargement des images
    QPixmap *grassTile = new QPixmap(QCoreApplication::applicationDirPath() + "/data/tiles/GrassTile.png");
    if (grassTile->isNull())
    {
       return false;
    }

    QPixmap *roadTile = new QPixmap(QCoreApplication::applicationDirPath() + "/data/tiles/RoadTile.png");
    if (roadTile->isNull())
    {
        return false;
    }
    QPixmap *mudTile = new QPixmap(QCoreApplication::applicationDirPath() + "/data/tiles/MudTile.png");
    if (mudTile->isNull())
    {
        return false;
    }

    // remplissage de la scène graphique avec les tuiles
    for(int x=0;x<m_tilemap->width();x++)
    {
        for(int y=0;y<m_tilemap->height();y++)
        {
            QGraphicsPixmapItem *item;
            switch(m_tilemap->tile(x,y))
            {
            case GroundType::Asphalt :  item = new QGraphicsPixmapItem(*roadTile);
                      break;
            case GroundType::Mud :      item = new QGraphicsPixmapItem( *mudTile);
                      break;
            default : item = new QGraphicsPixmapItem(*grassTile);
            }
            item->setPos(x*32,y*32);
            this->graphicsScene()->addItem(item);
        }
    }

    // ajoute des "murs" autour de la scène pour éviter que des objets ne sortent de la zone de jeu
    Vector v1;
    Vector v2(m_tilemap->width()*32,0.f);
    Vector v3(0.f,m_tilemap->height()*32);
    Vector v4(m_tilemap->width()*32,m_tilemap->height()*32);

    b2BodyDef bodyDef;
    bodyDef.type = b2_staticBody;
    b2Body *body = physicsWorld()->CreateBody(&bodyDef);
    b2EdgeShape lineUp;
    lineUp.Set(v1,v2);
    body->CreateFixture(&lineUp,1);
    b2EdgeShape lineLeft;
    lineLeft.Set(v1,v3);
    body->CreateFixture(&lineLeft,1);
    b2EdgeShape lineRight;
    lineRight.Set(v2,v4);
    body->CreateFixture(&lineRight,1);
    b2EdgeShape lineBottom;
    lineBottom.Set(v3,v4);
    body->CreateFixture(&lineBottom,1);

    return true;
}
예제 #5
0
	void PaintGenerator::generateHeightmap(const std::vector<Math::Triangle3D>& _triangles,
		Math::HexHeightMap& heightMap,
		Misc::ProgressTracker* progress_tracker) {

		if (_triangles.size() <= 0)
			return;

		#ifdef USE_BULLET_RAYCASTS
			// bullet initialization
			boost::shared_ptr<Physics::PhysicsWorld> physicsWorld(
				new Physics::PhysicsWorld());
			btRigidBody *meshBody
				= Physics::PhysicsFactory::createRigidTriMesh(_triangles);
			physicsWorld->registerRigidBody(meshBody);
		#endif

		#ifndef USE_BULLET_RAYCASTS

		vector<ObjectSpatial*> triangles;

		paintBound.setToObject(_triangles[0]);
		triangles.push_back(new Triangle3D(_triangles[0]));
		for (unsigned int i = 1; i < _triangles.size(); i++) {
			paintBound.expandToInclude(_triangles[i]);
			triangles.push_back(new Triangle3D(_triangles[i]));
		}

		triangleTree = new BSPTree3D(paintBound);
		triangleTree->add(triangles);

		#endif

		Math::HexGrid hex_grid = heightMap.getHexGrid();

		double cell_radius = hex_grid.getHexRadius();

		vector< vector< vector<PaintCell*> > > cell_array;

		int u_steps = hex_grid.numUIndices();
		int v_steps = hex_grid.numVIndices();

		cell_array.resize(u_steps);
		for (int i = 0; i < u_steps; i++) {
			cell_array[i].resize(v_steps);
		}

		if (progress_tracker) {
			progress_tracker->setCurrentStage("Generating heightmap...");
			progress_tracker->setTotalSteps(v_steps);
		}

		//Perform all raycasts
		for (int v = 0; v < v_steps; v++) {

			if (progress_tracker)
				progress_tracker->setCurrentStep(v);
			
			double v_pos = hex_grid.hexVPosition(v);
			
			for (int u = 0; u < u_steps; u++) {

				double u_pos = hex_grid.hexUPosition(u, v);
				
				
				vector<double> vert_heights1;
				vector<double> vert_heights2;

				heightsAtPoint(u_pos-cell_radius, v_pos, vert_heights1);

				for (unsigned int i = 0; i < vert_heights1.size(); i++) 
					heightMap.addVertexHeight(u*2, v, vert_heights1[i]);

				heightsAtPoint(u_pos+cell_radius, v_pos, vert_heights2);

				for (unsigned int i = 0; i < vert_heights2.size(); i++) 
					heightMap.addVertexHeight(u*2+1, v, vert_heights2[i]);

				if (!vert_heights1.empty() && !vert_heights2.empty()) {

					vector<double> center_heights;
					heightsAtPoint(u_pos, v_pos, center_heights);

					for (unsigned int i = 0; i < center_heights.size(); i++)
						heightMap.addHexHeight(u, v, center_heights[i]);
				}
				
			}

		}

		#ifndef USE_BULLET_RAYCASTS

		for (unsigned int i = 0; i < triangles.size(); i++)
			delete triangles[i];
		delete triangleTree;

		#endif
	}
예제 #6
0
void SceneObjectEntryPointSurf::onAdd() {
	// Physics

	std::shared_ptr<pge::SceneObjectPhysicsWorld> physicsWorld(new pge::SceneObjectPhysicsWorld());

	getRenderScene()->addNamed(physicsWorld, "physWrld");

	pge::SceneObjectRef lighting = getScene()->getNamed("lighting");

	pge::SceneObjectLighting* pLighting = static_cast<pge::SceneObjectLighting*>(lighting.get());

	pLighting->_ambientLight = pge::Vec3f(0.01f, 0.01f, 0.01f);

	/*std::shared_ptr<pge::SceneObjectDirectionalLightShadowed> light(new pge::SceneObjectDirectionalLightShadowed());

	getRenderScene()->add(light);

	light->create(pLighting, 2, 2048, 0.5f, 100.0f, 0.6f);

	light->setDirection(pge::Vec3f(-0.4f, -1.0f, 0.6f).normalized());

	light->setColor(pge::Vec3f(1.0f, 1.0f, 1.0f));*/

	// GUI

	/*std::shared_ptr<SceneObjectGUI> gui(new SceneObjectGUI());

	getRenderScene()->addNamed(gui, "gui", false);

	gui->_layer = 2.0f;*/

	// Control

	std::shared_ptr<SceneObjectOrbitCamera> camera(new SceneObjectOrbitCamera());

	getRenderScene()->add(camera, false);

	// Map

	/*std::shared_ptr<pge::Map3DWS> map(new pge::Map3DWS());

	map->_settings._pScene = getScene();

	map->createAsset("resources/maps/horrorMap.3dw");

	pge::addMapLights(*map, getScene());*/

	std::shared_ptr<SceneObjectProp> prop(new SceneObjectProp());

	getScene()->add(prop, true);

	prop->create("resources/models/BlockGame.obj");

	prop->calculateAABB();

	std::shared_ptr<SceneObjectSurf> cartPole(new SceneObjectSurf());

	getRenderScene()->add(cartPole, false);

	cartPole->create();

	cartPole->_layer = 100.0f;

	std::shared_ptr<SceneObjectProp> sky(new SceneObjectProp());

	getScene()->add(sky, true);

	sky->create("resources/models/skybox1.obj");

	sky->_transform = pge::Matrix4x4f::scaleMatrix(pge::Vec3f(100.0f, 100.0f, 100.0f));

	sky->calculateAABB();

	std::shared_ptr<pge::SceneObjectDirectionalLightShadowed> directionalLight(new pge::SceneObjectDirectionalLightShadowed());

	getScene()->add(directionalLight);

	directionalLight->create(pLighting, 3, 2048, 0.2f, 100.0f, 0.6f);

	directionalLight->setDirection(pge::Vec3f(-0.2523f, -0.9423f, -0.424f).normalized());

	directionalLight->setColor(pge::Vec3f(0.7f, 0.7f, 0.7f));

	// ------------------------------------------- Image Effects -------------------------------------------

	std::shared_ptr<pge::SceneObjectEffectBuffer> effectBuffer(new pge::SceneObjectEffectBuffer());

	getRenderScene()->addNamed(effectBuffer, "ebuf", false);

	effectBuffer->create(0.5f);

	std::shared_ptr<pge::Asset> assetBlurHorizontal;

	getScene()->getAssetManager("shader", pge::Shader::assetFactory)->getAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/blurHorizontal.frag", assetBlurHorizontal);

	std::shared_ptr<pge::Shader> blurShaderHorizontal = std::static_pointer_cast<pge::Shader>(assetBlurHorizontal);

	std::shared_ptr<pge::Asset> assetBlurVertical;

	getScene()->getAssetManager("shader", pge::Shader::assetFactory)->getAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/blurVertical.frag", assetBlurVertical);

	std::shared_ptr<pge::Shader> blurShaderVertical = std::static_pointer_cast<pge::Shader>(assetBlurVertical);

	std::shared_ptr<pge::Asset> assetRenderImage;

	getScene()->getAssetManager("shader", pge::Shader::assetFactory)->getAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/renderImage.frag", assetRenderImage);

	std::shared_ptr<pge::Shader> renderImageShader = std::static_pointer_cast<pge::Shader>(assetRenderImage);

	std::shared_ptr<pge::Asset> assetRenderMultImage;

	getScene()->getAssetManager("shader", pge::Shader::assetFactory)->getAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/renderImageMult.frag", assetRenderMultImage);

	std::shared_ptr<pge::Shader> renderImageMultShader = std::static_pointer_cast<pge::Shader>(assetRenderMultImage);

	std::shared_ptr<pge::Asset> assetNoise;

	getScene()->getAssetManager("tex2D", pge::Texture2D::assetFactory)->getAsset("resources/textures/noise.bmp", assetNoise);

	std::shared_ptr<pge::Texture2D> noiseMap = std::static_pointer_cast<pge::Texture2D>(assetNoise);

	noiseMap->bind();

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

	std::shared_ptr<pge::Asset> assetBlurHorizontalEdgeAware;

	getScene()->getAssetManager("shader", pge::Shader::assetFactory)->getAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/blurHorizontalEdgeAware.frag", assetBlurHorizontalEdgeAware);

	std::shared_ptr<pge::Shader> blurShaderHorizontalEdgeAware = std::static_pointer_cast<pge::Shader>(assetBlurHorizontalEdgeAware);

	std::shared_ptr<pge::Asset> assetBlurVerticalEdgeAware;

	getScene()->getAssetManager("shader", pge::Shader::assetFactory)->getAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/blurVerticalEdgeAware.frag", assetBlurVerticalEdgeAware);

	std::shared_ptr<pge::Shader> blurShaderVerticalEdgeAware = std::static_pointer_cast<pge::Shader>(assetBlurVerticalEdgeAware);

	// SSAO

	/*std::shared_ptr<pge::Shader> ssaoShader(new pge::Shader());

	ssaoShader->createAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/imageeffects/ssao.frag");

	std::shared_ptr<pge::SceneObjectSSAO> ssao(new pge::SceneObjectSSAO());

	getRenderScene()->add(ssao, false);

	ssao->create(blurShaderHorizontal, blurShaderVertical, ssaoShader, renderImageShader, noiseMap);

	ssao->_ssaoRadius = 0.1f;
	ssao->_ssaoStrength = 1.0f;
	ssao->_blurRadius = 0.002f;
	ssao->_numBlurPasses = 1;*/

	// SSR

	std::shared_ptr<pge::TextureCube> cubeMap(new pge::TextureCube());

	cubeMap->createAsset(
		"resources/environmentmaps/skybox1/CloudyLightRaysLeft2048.png "
		"resources/environmentmaps/skybox1/CloudyLightRaysRight2048.png "
		"resources/environmentmaps/skybox1/CloudyLightRaysBack2048.png "
		"resources/environmentmaps/skybox1/CloudyLightRaysFront2048.png "
		"resources/environmentmaps/skybox1/CloudyLightRaysDown2048.png "
		"resources/environmentmaps/skybox1/CloudyLightRaysUp2048.png "
		);

	std::shared_ptr<pge::Shader> ssrShader(new pge::Shader());

	ssrShader->createAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/imageeffects/ssr.frag");

	std::shared_ptr<pge::SceneObjectSSR> ssr(new pge::SceneObjectSSR());

	getRenderScene()->add(ssr, false);

	ssr->create(blurShaderHorizontalEdgeAware, blurShaderVerticalEdgeAware, ssrShader, renderImageShader, cubeMap, noiseMap);

	ssr->_layer = 1.0f;

	// Light Scattering

	/*std::shared_ptr<pge::Shader> lightScatteringShader(new pge::Shader());

	lightScatteringShader->createAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/imageeffects/lightScattering.frag");

	std::shared_ptr<pge::SceneObjectLightScattering> lightScattering(new pge::SceneObjectLightScattering());

	getRenderScene()->add(lightScattering, false);

	lightScattering->create(blurShaderHorizontal, blurShaderVertical, lightScatteringShader, renderImageShader);

	lightScattering->_layer = 1.5f;

	lightScattering->_lightSourcePosition = -light->getDirection() * 200.0f;
	lightScattering->_lightSourceColor = pge::Vec3f(1.0f, 0.9f, 0.8f) * 0.5f;*/

	// Depth of field

	/*std::shared_ptr<pge::Shader> depthOfFieldBlurShaderHorizontal(new pge::Shader());

	depthOfFieldBlurShaderHorizontal->createAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/imageeffects/depthOfFieldBlurHorizontal.frag");

	std::shared_ptr<pge::Shader> depthOfFieldBlurShaderVertical(new pge::Shader());

	depthOfFieldBlurShaderVertical->createAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/imageeffects/depthOfFieldBlurVertical.frag");

	std::shared_ptr<pge::SceneObjectDepthOfField> depthOfField(new pge::SceneObjectDepthOfField());

	getRenderScene()->add(depthOfField, false);

	depthOfField->create(depthOfFieldBlurShaderHorizontal, depthOfFieldBlurShaderVertical, renderImageShader);

	depthOfField->_layer = 1.5f;

	depthOfField->_focalDistance = 9.0f;
	depthOfField->_focalRange = 0.4f;
	depthOfField->_blurRadius = 0.002f;
	depthOfField->_numBlurPasses = 1;*/

	// FXAA

	std::shared_ptr<pge::Shader> lumaShader(new pge::Shader());

	lumaShader->createAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/imageeffects/lumaRender.frag");

	std::shared_ptr<pge::Shader> fxaaShader(new pge::Shader());

	fxaaShader->createAsset("NONE resources/shaders/noTransformVertex.vert resources/shaders/imageeffects/fxaa.frag");

	std::shared_ptr<pge::SceneObjectFXAA> fxaa(new pge::SceneObjectFXAA());

	getRenderScene()->add(fxaa, false);

	fxaa->create(fxaaShader, lumaShader);

	destroy();
}