void DepthOfField::Init() { // Initialization // Initialize Scene Scene = new SceneGraph(); // Initialize Renderer Renderer = new ForwardRenderer(Width,Height); Renderer->SetBackground(Vec4(1,0,0,1)); // Projection projection.Perspective(70.f,(f32)Width/(f32)Height,1.f,1000.f); // Create Camera Camera = new GameObject(); Camera->SetPosition(Vec3(0,2,20)); // Add a Directional Light Light = new GameObject(); dLight = new DirectionalLight(Vec4(1, 1, 1, 1), Vec3(-1, -1, 0)); Light->Add(dLight); Scene->Add(Light); // Create Game Object modelMesh = new Model("../../../../examples/DepthOfField/assets/suzanne.p3dm", false, ShaderUsage::Diffuse); for (uint32 i = 0; i < 10; i++) { GameObject* Monkey = new GameObject(); Monkey->SetPosition(Vec3(-23.f + i * 3.f, 0, -15.f + i * 3.f)); RenderingComponent* rMonkey = new RenderingComponent(modelMesh); Monkey->Add(rMonkey); Scene->Add(Monkey); go.push_back(Monkey); rc.push_back(rMonkey); } // Add Camera to Scene Scene->Add(Camera); Camera->LookAt(Vec3::ZERO); fullResBlur = new Texture(); fullResBlur->CreateEmptyTexture(TextureType::Texture, TextureDataType::RGBA16F, Width, Height); fullResBlur->SetRepeat(TextureRepeat::ClampToEdge, TextureRepeat::ClampToEdge, TextureRepeat::ClampToEdge); lowResBlur = new Texture(); lowResBlur->CreateEmptyTexture(TextureType::Texture, TextureDataType::RGBA16F, (int32)(Width*.25f), (int32)(Height*.25f)); lowResBlur->SetRepeat(TextureRepeat::ClampToEdge, TextureRepeat::ClampToEdge, TextureRepeat::ClampToEdge); EffectManager = new PostEffectsManager(Width, Height); blurX = new BlurXEffect(RTT::Color, Width, Height); blurY = new BlurYEffect(RTT::LastRTT, Width, Height); fullResBlur = blurY->GetTexture(); resize = new ResizeEffect(RTT::Color, (uint32)(Width*.25f), (uint32)(Height*.25f)); blurXlow = new BlurXEffect(RTT::LastRTT, (uint32)(Width*.25f), (uint32)(Height*.25f)); blurYlow = new BlurYEffect(RTT::LastRTT, (uint32)(Width*.25f), (uint32)(Height*.25f)); lowResBlur = blurYlow->GetTexture(); depthOfField = new DepthOfFieldEffect(lowResBlur, fullResBlur, Width, Height); EffectManager->AddEffect(blurX); EffectManager->AddEffect(blurY); EffectManager->AddEffect(resize); EffectManager->AddEffect(blurXlow); EffectManager->AddEffect(blurYlow); EffectManager->AddEffect(depthOfField); }
void SimplePhysics::Init() { // Initialization // Initialize Scene Scene = new SceneGraph(); // Initialize Renderer Renderer = new ForwardRenderer(Width,Height); // Projection projection.Perspective(70.f,(f32)Width/(f32)Height,1.f,500.f); // Create Camera Camera = new GameObject(); Camera->SetPosition(Vec3(0,20.0,300)); // Add Camera to Scene Scene->Add(Camera); // Physics physics = new Physics(); physics->InitPhysics(); // Add a Directional Light Light = new GameObject(); dLight = new DirectionalLight(Vec4(1,1,1,1),Vec3(-1,-1,0)); dLight->EnableCastShadows(1024,1024,projection,1,500,1); dLight->SetShadowBias(1.f,3.f); Light->Add(dLight); // Add Light to Scene Scene->Add(Light); // Create Materials Diffuse = new GenericShaderMaterial(ShaderUsage::Color | ShaderUsage::Diffuse | ShaderUsage::DirectionalShadow); Diffuse->SetColor(Vec4(0.8f,0.8f,0.8f,1.f)); // Set Selected Mesh PTR NULL SelectedMesh = NULL; // Create Cubes srand( (unsigned int)time( NULL ) ); // Create Geometry cubeHandle = new Cube(5,5,5); // Create 100 Cubes #if !defined(GLES2) for (uint32 i=0;i<1000;i++) #else for (uint32 i=0;i<100;i++) #endif { // Create GameObject GameObject* Cube = new GameObject(); // Add Cube to GameObjects List Cubes.push_back(Cube); // Create Rendering Component using Geometry Previously Created with AssetManager RenderingComponent* rCube = new RenderingComponent(cubeHandle, Diffuse); // Add Rendering Component to Rendering Components List rCubes.push_back(rCube); // Add Rendering Component to GameObject Cube->Add(rCube); // Create Physics Component IPhysicsComponent* pCube = (IPhysicsComponent*)physics->CreateBox(5,5,5,10); // Add Physics Component to Physics List pCubes.push_back(pCube); // Add Physics Component to GameObject Cube->Add(pCube); // Add GameObject to Scene Scene->Add(Cube); // Set Random Position to the GameObject Cube->SetPosition(Vec3((f32)(rand() % 100) -50.f, (f32)(rand() % 100)-50.f, (f32)(rand() % 100) -50.f)); } // Create Floor Floor = new GameObject(); // Create Geometry floorHandle = new Cube(100,3,100); // Create Floor Geometry rFloor = new RenderingComponent(floorHandle,Diffuse); // Create Floor Physics pFloor = (IPhysicsComponent*)physics->CreateBox(100,3,100,0); // Add Physics Component to GameObject Floor->Add(pFloor); // Add Rendering Component To GameObject Floor->Add(rFloor); // Add Floor to Scene Scene->Add(Floor); // Translate Floor Floor->SetPosition(Vec3(0,-100,0)); }