ExperimentalApp() : GLFWApp(1280, 800, "Glass Material App")
    {
        igm.reset(new gui::ImGuiManager(window));
        gui::make_dark_theme();
        
        //cubeTex = load_cubemap();

        int width, height;
        glfwGetWindowSize(window, &width, &height);
        glViewport(0, 0, width, height);

         // Debugging views for offscreen surfaces
        uiSurface.bounds = {0, 0, (float) width, (float) height};
        uiSurface.add_child( {{0.0000f, +10},{0, +10},{0.1667f, -10},{0.133f, +10}});
        uiSurface.add_child( {{0.1667f, +10},{0, +10},{0.3334f, -10},{0.133f, +10}});
        uiSurface.layout();

        grid = RenderableGrid(1, 100, 100);
        cameraController.set_camera(&camera);
        camera.look_at({0, 2.5, -2.5}, {0, 2.0, 0});

		lights[0] = {{0, 10, -10}, {0, 0, 1}};
		lights[1] = {{0, 10, 10}, {0, 1, 0}};

        Renderable reflectiveSphere = Renderable(make_sphere(2.f));
        reflectiveSphere.pose = Pose(float4(0, 0, 0, 1), float3(0, 2, 0));
        glassModels.push_back(std::move(reflectiveSphere));

        Renderable debugAxis = Renderable(make_axis(), false, GL_LINES);
        debugAxis.pose = Pose(float4(0, 0, 0, 1), float3(0, 1, 0));
        regularModels.push_back(std::move(debugAxis));

        Renderable cubeA = Renderable(make_cube());
        cubeA.pose = Pose(make_rotation_quat_axis_angle({1, 0, 1}, ANVIL_PI / 3), float3(5, 0, 0));
        regularModels.push_back(std::move(cubeA));

        Renderable cubeB = Renderable(make_cube());
		cubeB.pose = Pose(make_rotation_quat_axis_angle({1, 0, 1}, ANVIL_PI / 4), float3(-5, 0, 0));
        regularModels.push_back(std::move(cubeB));

        glassMaterialShader = make_watched_shader(shaderMonitor, "assets/shaders/glass_vert.glsl", "assets/shaders/glass_frag.glsl");
        simpleShader = make_watched_shader(shaderMonitor, "assets/shaders/simple_vert.glsl", "assets/shaders/simple_frag.glsl");

        cubeCamera.reset(new CubemapCamera({1024, 1024}));

        gl_check_error(__FILE__, __LINE__);
    }
示例#2
0
 ExperimentalApp() : GLFWApp(940, 720, "GlCamera Sandbox App")
 {
     int width, height;
     glfwGetWindowSize(window, &width, &height);
     glViewport(0, 0, width, height);
     
     cameraController.set_camera(&camera);
     
     camera.look_at({0, 8, 24}, {0, 0, 0});
     cameraZ = camera.pose.position.z;
     
     simpleShader.reset(new GlShader(read_file_text("assets/shaders/simple_vert.glsl"), read_file_text("assets/shaders/simple_frag.glsl")));
     
     {
         lights.resize(2);
         lights[0].color = float3(249.f / 255.f, 228.f / 255.f, 157.f / 255.f);
         lights[0].pose.position = float3(25, 15, 0);
         lights[1].color = float3(255.f / 255.f, 242.f / 255.f, 254.f / 255.f);
         lights[1].pose.position = float3(-25, 15, 0);
     }
     
     {
         cameraPositions.resize(2);
         cameraPositions[0] = Renderable(make_frustum());
         cameraPositions[0].pose.position = float3(0, 8, +24);
         cameraPositions[0].mesh.set_non_indexed(GL_LINES);
         
         cameraPositions[1] = Renderable(make_frustum());
         cameraPositions[1].pose.position = float3(0, 8, -24);
         cameraPositions[1].mesh.set_non_indexed(GL_LINES);
     }
     
     {
         proceduralModels.resize(4);
         
         proceduralModels[0] = Renderable(make_sphere(1.0));
         proceduralModels[0].pose.position = float3(0, 2, +8);
         
         proceduralModels[1] = Renderable(make_cube());
         proceduralModels[1].pose.position = float3(0, 2, -8);
         
         proceduralModels[2] = Renderable(make_icosahedron());
         proceduralModels[2].pose.position = float3(8, 2, 0);
         
         proceduralModels[3] = Renderable(make_octohedron());
         proceduralModels[3].pose.position = float3(-8, 2, 0);
     }
     
     start = look_at_pose(float3(0, 8, +24), float3(-8, 2, 0));
     end = look_at_pose(float3(0, 8, -24), float3(-8, 2, 0));
     
     grid = RenderableGrid(1, 64, 64);
     
     gl_check_error(__FILE__, __LINE__);
 }
示例#3
0
void GameLoop(SDL_Renderer& ren)
{
	auto sprite = std::make_unique<Sprite>("../res/BackGround.jpg", ren);
	auto background = Renderable(*sprite,  0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
	
	jewels j(ren);

	auto lastTime=0;
	
	while (1)
	{
		
		const auto thisTime = SDL_GetTicks();
		const auto delta = (float)(thisTime-lastTime) / 1000.f;
		lastTime = thisTime;
		
		SDL_Event event;
		const auto haveEvent = SDL_PollEvent( &event ) == 1;
		if( haveEvent )
		{
			if( event.type == SDL_QUIT || event.type == SDL_KEYDOWN)
			{
				break;
			}
		}

		SDL_RenderClear( &ren );

		background.render( ren );
		j.render( ren );

		SDL_RenderPresent( &ren );
		
		SDL_Delay(1);
		
	}

}
示例#4
0
Renderable Renderable::temporary()
{
    return Renderable(false);
}
示例#5
0
void KoiCeateMesh( const KoiSurfacePolygons &polygons )
{
    ShapePtr shape = ShapePtr( new PolyMesh( polygons ) );
    Renderable renderable = Renderable( shape );
}
    ExperimentalApp() : GLFWApp(1280, 800, "Geometric Algorithm Development App")
    {
        glfwSwapInterval(0);

        igm.reset(new gui::ImGuiManager(window));
        gui::make_dark_theme();

        fixedTimer.start();

        lights[0] = {{0, 10, -10}, {0, 0, 1}};
        lights[1] = {{0, 10, 10}, {0, 1, 0}};

        int width, height;
        glfwGetWindowSize(window, &width, &height);
        glViewport(0, 0, width, height);

        grid = RenderableGrid(1, 100, 100);
        cameraController.set_camera(&camera);
        camera.look_at({0, 2.5, -2.5}, {0, 2.0, 0});

        simpleShader = make_watched_shader(shaderMonitor, "../assets/shaders/simple_vert.glsl", "assets/shaders/simple_frag.glsl");
        normalDebugShader = make_watched_shader(shaderMonitor, "../assets/shaders/normal_debug_vert.glsl", "assets/shaders/normal_debug_frag.glsl");

        Renderable debugAxis = Renderable(make_axis(), false, GL_LINES);
        debugAxis.pose = Pose(float4(0, 0, 0, 1), float3(0, 1, 0));
        debugModels.push_back(std::move(debugAxis));

        // Initial supershape settings
        supershape = Renderable(make_supershape_3d(16, 5, 7, 4, 12));
        supershape.pose.position = {0, 2, -2};

        // Initialize PTF stuff
        {
            std::array<float3, 4> controlPoints = {float3(0.0f, 0.0f, 0.0f), float3(0.667f, 0.25f, 0.0f), float3(1.33f, 0.25f, 0.0f), float3(2.0f, 0.0f, 0.0f)};
            ptf = make_parallel_transport_frame_bezier(controlPoints, 32);

            for (int i = 0; i < ptf.size(); ++i)
            {
                Renderable p = Renderable(make_cube());
                ptfBoxes.push_back(std::move(p));
            }
        }

        // Initialize Parabolic pointer stuff
        {
            // Set up the ground plane used as a nav mesh for the parabolic pointer
            worldSurface = make_plane(48, 48, 96, 96);
            for (auto & p : worldSurface.vertices)
            {
                float4x4 model = make_rotation_matrix({1, 0, 0}, -ANVIL_PI / 2);
                p = transform_coord(model, p);
            }
            worldSurfaceRenderable = Renderable(worldSurface);

            parabolicPointer = make_parabolic_pointer(worldSurface, params);
        }

        // Initialize objects for ballistic trajectory tests
        {
            turret.source = Renderable(make_tetrahedron());
            turret.source.pose = Pose({-5, 2, 5});

            turret.target = Renderable(make_cube());
            turret.target.pose = Pose({0, 0, 40});

            turret.bullet = Renderable(make_sphere(1.0f));
        }

        float4x4 tMat = mul(make_translation_matrix({3, 4, 5}), make_rotation_matrix({0, 0, 1}, ANVIL_PI / 2));
        auto p = make_pose_from_transform_matrix(tMat);
        std::cout << tMat << std::endl;
        std::cout << p << std::endl;

        gl_check_error(__FILE__, __LINE__);
    }