// Loads the scene data void OculusWorldDemoApp::PopulateScene(const char *fileName) { XmlHandler xmlHandler; if(!xmlHandler.ReadFile(fileName, pRender, &MainScene, &CollisionModels, &GroundCollisionModels)) { Menu.SetPopupMessage("FILE LOAD FAILED"); Menu.SetPopupTimeout(10.0f, true); } MainScene.SetAmbient(Color4f(1.0f, 1.0f, 1.0f, 1.0f)); // Handy cube. Ptr<Model> smallGreenCubeModel = *Model::CreateBox(Color(0, 255, 0, 255), Vector3f(0.0f, 0.0f, 0.0f), Vector3f(0.004f, 0.004f, 0.004f)); SmallGreenCube.World.Add(smallGreenCubeModel); String mainFilePathNoExtension = MainFilePath; mainFilePathNoExtension.StripExtension(); // 10x10x10 cubes. Ptr<Fill> fillR = *CreateTextureFill(pRender, mainFilePathNoExtension + "_redCube.tga"); PopulateCubeFieldScene(&RedCubesScene, fillR.GetPtr(), 10, 10, 10, Vector3f(0.0f, 0.0f, 0.0f), 0.4f); // 10x10x10 cubes. Ptr<Fill> fillB = *CreateTextureFill(pRender, mainFilePathNoExtension + "_blueCube.tga"); PopulateCubeFieldScene(&BlueCubesScene, fillB.GetPtr(), 10, 10, 10, Vector3f(0.0f, 0.0f, 0.0f), 0.4f); // Anna: OculusWorldDemo/Assets/Tuscany/Tuscany_OculusCube.tga file needs to be added Ptr<Fill> imageFill = *CreateTextureFill(pRender, mainFilePathNoExtension + "_OculusCube.tga"); PopulateCubeFieldScene(&OculusCubesScene, imageFill.GetPtr(), 11, 4, 35, Vector3f(0.0f, 0.0f, -6.0f), 0.5f); float r = 0.01f; Ptr<Model> purpleCubesModel = *new Model(Prim_Triangles); for (int i = 0; i < 10; i++) for (int j = 0; j < 10; j++) for (int k = 0; k < 10; k++) purpleCubesModel->AddSolidColorBox(i*0.25f-1.25f-r,j*0.25f-1.25f-r,k*0.25f-1.25f-r, i*0.25f-1.25f+r,j*0.25f-1.25f+r,k*0.25f-1.25f+r,0xFF9F009F); }
// Loads the scene data void OculusWorldDemoApp::PopulateScene(const char *fileName) { ClearScene(); XmlHandler xmlHandler; if(!xmlHandler.ReadFile(fileName, pRender, &MainScene, &CollisionModels, &GroundCollisionModels, SrgbRequested, AnisotropicSample)) { Menu.SetPopupMessage("FILE LOAD FAILED"); Menu.SetPopupTimeout(10.0f, true); } MainScene.SetAmbient(Color4f(1.0f, 1.0f, 1.0f, 1.0f)); String mainFilePathNoExtension = MainFilePath; mainFilePathNoExtension.StripExtension(); unsigned int fillTextureLoadFlags = 0; fillTextureLoadFlags |= SrgbRequested ? TextureLoad_SrgbAware : 0; fillTextureLoadFlags |= AnisotropicSample ? TextureLoad_Anisotropic : 0; // 10x10x10 cubes. Ptr<Fill> fillR = *CreateTextureFill(pRender, mainFilePathNoExtension + "_greenCube.tga", fillTextureLoadFlags); PopulateCubeFieldScene(&GreenCubesScene, fillR.GetPtr(), 10, 10, 10, Vector3f(0.0f, 0.0f, 0.0f), 0.4f); // 10x10x10 cubes. Ptr<Fill> fillB = *CreateTextureFill(pRender, mainFilePathNoExtension + "_redCube.tga", fillTextureLoadFlags); PopulateCubeFieldScene(&RedCubesScene, fillB.GetPtr(), 10, 10, 10, Vector3f(0.0f, 0.0f, 0.0f), 0.4f); // Anna: OculusWorldDemo/Assets/Tuscany/Tuscany_OculusCube.tga file needs to be added Ptr<Fill> imageFill = *CreateTextureFill(pRender, mainFilePathNoExtension + "_OculusCube.tga", fillTextureLoadFlags); PopulateCubeFieldScene(&OculusCubesScene, imageFill.GetPtr(), 11, 4, 35, Vector3f(0.0f, 0.0f, -6.0f), 0.5f); // Handy untextured green cube. Ptr<Model> smallGreenCubeModel = *Model::CreateBox(Color(0, 255, 0, 255), Vector3f(0.0f, 0.0f, 0.0f), Vector3f(0.004f, 0.004f, 0.004f)); SmallGreenCube.World.Add(smallGreenCubeModel); // Textured cubes. Ptr<Model> smallOculusCubeModel = *Model::CreateBox(Color(255, 255, 255, 255), Vector3f(0.0f, 0.0f, 0.0f), Vector3f(0.004f, 0.004f, 0.004f)); smallOculusCubeModel->Fill = imageFill; SmallOculusCube.World.Add(smallOculusCubeModel); Ptr<Model> smallOculusGreenCubeModel = *Model::CreateBox(Color(255, 255, 255, 255), Vector3f(0.0f, 0.0f, 0.0f), Vector3f(0.004f, 0.004f, 0.004f)); smallOculusGreenCubeModel->Fill = fillR; SmallOculusGreenCube.World.Add(smallOculusGreenCubeModel); Ptr<Model> smallOculusRedCubeModel = *Model::CreateBox(Color(255, 255, 255, 255), Vector3f(0.0f, 0.0f, 0.0f), Vector3f(0.004f, 0.004f, 0.004f)); smallOculusRedCubeModel->Fill = fillB; SmallOculusRedCube.World.Add(smallOculusRedCubeModel); int textureLoadFlags = 0; textureLoadFlags |= SrgbRequested ? TextureLoad_SrgbAware : 0; textureLoadFlags |= AnisotropicSample ? TextureLoad_Anisotropic : 0; textureLoadFlags |= TextureLoad_MakePremultAlpha; textureLoadFlags |= TextureLoad_SwapTextureSet; Ptr<File> imageFile = *new SysFile(mainFilePathNoExtension + "_redCube.tga"); if (imageFile->IsValid()) TextureRedCube = *LoadTextureTgaTopDown(pRender, imageFile, textureLoadFlags, 255); imageFile = *new SysFile(mainFilePathNoExtension + "_greenCube.tga"); if (imageFile->IsValid()) TextureGreenCube = *LoadTextureTgaTopDown(pRender, imageFile, textureLoadFlags, 255); imageFile = *new SysFile(mainFilePathNoExtension + "_OculusCube.tga"); if (imageFile->IsValid()) TextureOculusCube = *LoadTextureTgaTopDown(pRender, imageFile, textureLoadFlags, 255); imageFile = *new SysFile(mainFilePathNoExtension + "_Cockpit_Panel.tga"); if (imageFile->IsValid()) CockpitPanelTexture = *LoadTextureTgaTopDown(pRender, imageFile, textureLoadFlags, 255); XmlHandler xmlHandler2; String controllerFilename = MainFilePath.GetPath() + "LeftController.xml"; if (!xmlHandler2.ReadFile(controllerFilename.ToCStr(), pRender, &ControllerScene, NULL, NULL)) { Menu.SetPopupMessage("CONTROLLER FILE LOAD FAILED"); Menu.SetPopupTimeout(10.0f, true); } ControllerScene.AddLight(Vector3f(0, 30.0f, 0), Color4f(1.0f, 1.0f, 1.0f, 1.0f)); ControllerScene.AddLight(Vector3f(0, -10.0f, 0), Color4f(.2f, .2f, .2f, 1.0f)); }
// Loads the scene data void OculusWorldDemoApp::PopulateScene(const char *fileName) { ClearScene(); XmlHandler xmlHandler; if(!xmlHandler.ReadFile(fileName, pRender, &MainScene, &CollisionModels, &GroundCollisionModels, SrgbRequested, AnisotropicSample)) { Menu.SetPopupMessage("FILE LOAD FAILED"); Menu.SetPopupTimeout(10.0f, true); } MainScene.SetAmbient(Color4f(1.0f, 1.0f, 1.0f, 1.0f)); String mainFilePathNoExtension = MainFilePath; mainFilePathNoExtension.StripExtension(); unsigned int fillTextureLoadFlags = 0; fillTextureLoadFlags |= SrgbRequested ? TextureLoad_SrgbAware : 0; fillTextureLoadFlags |= AnisotropicSample ? TextureLoad_Anisotropic : 0; // 10x10x10 cubes. Ptr<Fill> fillR = *CreateTextureFill(pRender, mainFilePathNoExtension + "_greenCube.tga", fillTextureLoadFlags); PopulateCubeFieldScene(&GreenCubesScene, fillR.GetPtr(), 10, 10, 10, Vector3f(0.0f, 0.0f, 0.0f), 0.4f); Ptr<Fill> fillB = *CreateTextureFill(pRender, mainFilePathNoExtension + "_redCube.tga", fillTextureLoadFlags); PopulateCubeFieldScene(&RedCubesScene, fillB.GetPtr(), 10, 10, 10, Vector3f(0.0f, 0.0f, 0.0f), 0.4f); Ptr<Fill> fillY = *CreateTextureFill(pRender, mainFilePathNoExtension + "_yellowCube.tga", fillTextureLoadFlags); PopulateCubeFieldScene(&YellowCubesScene, fillY.GetPtr(), 10, 10, 10, Vector3f(0.0f, 0.0f, 0.0f), 0.4f); Ptr<Fill> imageFill = *CreateTextureFill(pRender, mainFilePathNoExtension + "_OculusCube.tga", fillTextureLoadFlags); PopulateCubeFieldScene(&OculusCubesScene, imageFill.GetPtr(), 11, 4, 35, Vector3f(0.0f, 0.0f, -6.0f), 0.5f); Vector3f blockModelSizeVec = Vector3f(BlockModelSize, BlockModelSize, BlockModelSize); // Handy untextured green cube. Ptr<Model> smallGreenCubeModel = *Model::CreateBox(Color(0, 255, 0, 255), Vector3f(0.0f, 0.0f, 0.0f), blockModelSizeVec); SmallGreenCube.World.Add(smallGreenCubeModel); // Textured cubes. Ptr<Model> smallOculusCubeModel = *Model::CreateBox(Color(255, 255, 255, 255), Vector3f(0.0f, 0.0f, 0.0f), blockModelSizeVec); smallOculusCubeModel->Fill = imageFill; SmallOculusCube.World.Add(smallOculusCubeModel); Ptr<Model> smallOculusGreenCubeModel = *Model::CreateBox(Color(255, 255, 255, 255), Vector3f(0.0f, 0.0f, 0.0f), blockModelSizeVec); smallOculusGreenCubeModel->Fill = fillR; SmallOculusGreenCube.World.Add(smallOculusGreenCubeModel); Ptr<Model> smallOculusRedCubeModel = *Model::CreateBox(Color(255, 255, 255, 255), Vector3f(0.0f, 0.0f, 0.0f), blockModelSizeVec); smallOculusRedCubeModel->Fill = fillB; SmallOculusRedCube.World.Add(smallOculusRedCubeModel); int textureLoadFlags = 0; textureLoadFlags |= SrgbRequested ? TextureLoad_SrgbAware : 0; textureLoadFlags |= AnisotropicSample ? TextureLoad_Anisotropic : 0; textureLoadFlags |= TextureLoad_MakePremultAlpha; textureLoadFlags |= TextureLoad_SwapTextureSet; Ptr<File> imageFile = *new SysFile(mainFilePathNoExtension + "_OculusCube.tga"); if (imageFile->IsValid()) TextureOculusCube = *LoadTextureTgaTopDown(pRender, imageFile, textureLoadFlags, 255); imageFile = *new SysFile(mainFilePathNoExtension + "_Cockpit_Panel.tga"); if (imageFile->IsValid()) CockpitPanelTexture = *LoadTextureTgaTopDown(pRender, imageFile, textureLoadFlags, 255); XmlHandler xmlHandler2; String controllerFilename = MainFilePath.GetPath() + "LeftController.xml"; if (!xmlHandler2.ReadFile(controllerFilename.ToCStr(), pRender, &ControllerScene, NULL, NULL)) { Menu.SetPopupMessage("CONTROLLER FILE LOAD FAILED"); Menu.SetPopupTimeout(10.0f, true); } ControllerScene.AddLight(Vector3f(0, 30.0f, 0), Color4f(1.0f, 1.0f, 1.0f, 1.0f)); ControllerScene.AddLight(Vector3f(0, -10.0f, 0), Color4f(.2f, .2f, .2f, 1.0f)); // Load "Floor Circle" models and textures - used to display floor for seated configuration. Ptr<File> floorImageFile = *new SysFile(mainFilePathNoExtension + "_SitFloorConcrete.tga"); Ptr<Texture> roundFloorTexture = *LoadTextureTgaTopDown(pRender, floorImageFile, textureLoadFlags, 220); if (roundFloorTexture) roundFloorTexture->SetSampleMode(Sample_Anisotropic | Sample_Repeat); Ptr<ShaderFill> fill = *new ShaderFill(*pRender->CreateShaderSet()); fill->GetShaders()->SetShader(pRender->LoadBuiltinShader(Shader_Vertex, VShader_MVP)); fill->GetShaders()->SetShader(pRender->LoadBuiltinShader(Shader_Fragment, FShader_Texture)); fill->SetTexture(0, roundFloorTexture); pRoundFloorModel[0] = *new Model(Prim_Triangles); pRoundFloorModel[0]->Fill = fill; AddFloorCircleModelVertices(pRoundFloorModel[0], 0.3f); OculusRoundFloor[0].World.Add(pRoundFloorModel[0]); pRoundFloorModel[1] = *new Model(Prim_Triangles); pRoundFloorModel[1]->Fill = fill; AddFloorCircleDonutModelVertices(pRoundFloorModel[1], 0.35f); OculusRoundFloor[1].World.Add(pRoundFloorModel[1]); if (ovr_GetTrackerCount(Session) > 0) PositionalTracker.Init(Session, mainFilePathNoExtension, pRender, SrgbRequested, AnisotropicSample); }