void createMazeScene(ViewerSP viewer, CameraSP camera, GroupSP& scene, LightSP& light) { ShaderCoreFactory shaderFactory("resources/shaders"); #ifdef SCG_CPP11_INITIALIZER_LISTS auto shaderPhong = shaderFactory.createShaderFromSourceFiles({ ShaderFile("phong_vert.glsl", GL_VERTEX_SHADER), ShaderFile("phong_frag.glsl", GL_FRAGMENT_SHADER), ShaderFile("blinn_phong_lighting.glsl", GL_FRAGMENT_SHADER), ShaderFile("texture_none.glsl", GL_FRAGMENT_SHADER) }); auto shaderPhongTex = shaderFactory.createShaderFromSourceFiles({ ShaderFile("phong_vert.glsl", GL_VERTEX_SHADER), ShaderFile("phong_frag.glsl", GL_FRAGMENT_SHADER), ShaderFile("blinn_phong_lighting.glsl", GL_FRAGMENT_SHADER), ShaderFile("texture2d_modulate.glsl", GL_FRAGMENT_SHADER) }); // Gouraud shader auto shaderGouraud = shaderFactory.createShaderFromSourceFiles({ ShaderFile("simple_gouraud_vert.glsl", GL_VERTEX_SHADER), ShaderFile("simple_gouraud_frag.glsl", GL_FRAGMENT_SHADER) }); // Phong shader with texture mapping auto shaderBumpTex = shaderFactory.createShaderFromSourceFiles({ ShaderFile("bump_vert.glsl", GL_VERTEX_SHADER), ShaderFile("texture2d_modulate.glsl", GL_FRAGMENT_SHADER), ShaderFile("bump_frag.glsl", GL_FRAGMENT_SHADER) }); // Skybox shader auto shaderSkybox = shaderFactory.createShaderFromSourceFiles( { ShaderFile("skybox_vert.glsl", GL_VERTEX_SHADER), ShaderFile("skybox_frag.glsl", GL_FRAGMENT_SHADER) }); #else std::vector<ShaderFile> shaderFiles; shaderFiles.push_back(ShaderFile("simple_gouraud_vert.glsl", GL_VERTEX_SHADER)); shaderFiles.push_back(ShaderFile("simple_gouraud_frag.glsl", GL_FRAGMENT_SHADER)); auto shaderGouraud = shaderFactory.createShaderFromSourceFiles(shaderFiles); // Phong shader with texture mapping shaderFiles.clear(); shaderFiles.push_back(ShaderFile("bump_vert.glsl", GL_VERTEX_SHADER)); shaderFiles.push_back(ShaderFile("texture2d_modulate.glsl", GL_FRAGMENT_SHADER)); shaderFiles.push_back(ShaderFile("bump_frag.glsl", GL_FRAGMENT_SHADER)); auto shaderBumpTex = shaderFactory.createShaderFromSourceFiles(shaderFiles); shaderFiles.clear(); shaderFiles.push_back(ShaderFile("skybox_vert.glsl", GL_VERTEX_SHADER)); shaderFiles.push_back(ShaderFile("skybox_frag.glsl", GL_FRAGMENT_SHADER)); auto shaderSkybox = shaderFactory.createShaderFromSourceFiles(shaderFiles); #endif // camera controllers camera->translate(glm::vec3(0.f, 2.f, 1.f))->dolly(0.f); #ifdef SCG_CPP11_INITIALIZER_LISTS viewer->addControllers({ FirstPersonController::create(camera), MouseController::create(camera) }); #else viewer->addController(FirstPersonController::create(camera)) ->addController(MouseController::create(camera)); #endif maze::Maze maze1 = maze::generateMaze(); GeometryCoreFactory geometryFactory; TextureCoreFactory textureFactory("resources/textures"); auto matWhite = MaterialCore::create(); matWhite->setAmbientAndDiffuse(glm::vec4(1.f, 1.f, 1.f, 1.f)) ->setSpecular(glm::vec4(0.1f, 0.1f, 0.1f, 1.f)) ->setShininess(5.f) ->init(); auto skyboxTrans = createSkybox(geometryFactory, textureFactory, shaderSkybox, matWhite); auto slenderTrans = createSlenderman(geometryFactory, textureFactory, shaderPhongTex, matWhite); auto mazeScene = Group::create(); mazeScene->addCore(shaderPhong); mazeScene->addChild(camera)->addChild(light); light->addChild(skyboxTrans); light->addChild(slenderTrans); for (int i = 0; i < maze::MAZE_SIZE; i++) { for (int j = 0; j < maze::MAZE_SIZE; j++) { light->addChild(cell::createCell(j, i, maze1, shaderBumpTex)); } } scene = mazeScene; }