64 lines
2 KiB
C++
64 lines
2 KiB
C++
/** An entry-point file using render/GlutRender as a renderer, displaying the
|
|
* bouncing implicit-surface defined sphere.
|
|
**/
|
|
|
|
#include <cstring>
|
|
|
|
#include "render/GlutRender.hpp"
|
|
#include "Ball.hpp"
|
|
#include "FlatGround.hpp"
|
|
#include "MarchingCubes.hpp"
|
|
#include "GroundFlatMesh.hpp"
|
|
|
|
#include "periodic_updates.hpp"
|
|
|
|
int main(int argc, char** argv) {
|
|
bool perlin = false;
|
|
for(int pos=1; pos < argc; ++pos) {
|
|
if(strcmp(argv[pos], "-perlin") == 0)
|
|
perlin = true;
|
|
}
|
|
|
|
// Last minute switch, this code is ugly, please close your eyes until
|
|
// stated otherwise.
|
|
PerlinGround perlin_ground;
|
|
FlatGround flat_ground;
|
|
GroundFlatMesh ground_mesh(Point(0., 0., 0.), 0.05);
|
|
Ground* ball_ground = nullptr;
|
|
if(perlin)
|
|
ball_ground = &perlin_ground;
|
|
else
|
|
ball_ground = &flat_ground;
|
|
// You can open your eyes, now.
|
|
|
|
GlutRender& render = GlutRender::get_instance();
|
|
render.init(&argc, argv, 640, 480, "Bouncing stuff");
|
|
|
|
Ball ball(Point(0, 5, 0), ball_ground, 0.55, -.5, -.7, 1, 1);
|
|
ball.get_surface()->set_color(Color(1., 0., 0.));
|
|
|
|
Cuboid bbox = ball.get_surface()->max_bounding_box();
|
|
Cuboid bbox_2(Point(-20, -3, -20), Point(20,3,20));
|
|
printf("%.2lf %.2lf %.2lf | %.2lf %.2lf %.2lf\n",
|
|
bbox.low(0), bbox.low(1), bbox.low(2),
|
|
bbox.high(0), bbox.high(1), bbox.high(2));
|
|
render.add_surface(ball.get_surface(), bbox);
|
|
|
|
if(perlin) {
|
|
perlin_ground.get_surface()->set_color(Color(0.13, 0.82, 0.21));
|
|
render.add_surface(perlin_ground.get_surface(), bbox_2, 1.2);
|
|
}
|
|
else {
|
|
ground_mesh.get_mesh()->set_color(Color(0.13, 0.82, 0.21));
|
|
render.add_mesh(ground_mesh.get_mesh());
|
|
}
|
|
//render.follow_implicit_position(ball.get_surface());
|
|
|
|
render.set_idle_func(periodic_update);
|
|
render.add_kb_handler(periodic_kb_handler);
|
|
render.add_kb_up_handler(periodic_kb_up_handler);
|
|
init_periodic_static(&ball, &render);
|
|
render.run();
|
|
|
|
return 0;
|
|
}
|