@@ -50,78 +50,81 @@ int main()
5050 .height (screen_height))
5151 .with (Gl::Builder ()
5252 .blending ()
53- .cull_face ()
53+ .backface_culling ()
5454 .multisample ()
5555 .depth_test ())
5656 .with (Input::Builder ())
5757 .build ();
5858 auto engine = Engine::managed ();
5959
60- auto camera =
61- tenno::make_shared<Camera>(Camera::Builder ()
62- .projection_type (Camera::ProjectionType::Perspective)
63- .position (Camera::Aircraft::Builder ()
64- .pos ({0 .0f , 0 .0f , 0 .0f })
65- .build ())
66- .fov (30 .0f )
67- .build ());
68-
69- auto shader = Shader::create ({
60+ auto maybe_shader = Shader::create ({
7061 { Shader::Type::Vertex, phong_vs },
7162 { Shader::Type::Fragment, phong_fs } });
72- if (!shader )
63+ if (!maybe_shader )
7364 {
7465 ERROR (" Error creating shader" );
7566 return 1 ;
7667 }
77- auto shader_ptr = tenno::make_shared<Shader>(tenno::move (shader.value ()));
78-
79- auto material = tenno::make_shared<Material>(shader_ptr);
80- material->set_float (" material.shininess" , 32 .0f );
81-
82- auto model =
83- tenno::make_shared<Model>(Model::Builder ()
84- .path (" examples/assets/models/backpack/backpack.obj" )
85- .transform (Transform ()
86- .translate (glm::vec3 (25 .0f , 0 .0f , 0 .0f ))
87- .rotate_y (-90 .0f )
88- .scale (glm::vec3 (1.0 )))
89- .texture_props (Texture::Properties ()
90- .flipped (true ))
91- .material (material)
92- .build ());
93-
68+ auto shader = tenno::move (maybe_shader.value ());
69+ auto material = Material (tenno::move (shader));
70+ material.set_float (" material.shininess" , 32 .0f );
71+
9472 auto phong_dir =
95- tenno::make_shared<PhongDirLight>(PhongDirLight ()
96- .set_strength (0 .5f ));
73+ PhongDirLight ()
74+ .set_strength (0 .5f );
75+ auto phong_dir_ptr =
76+ tenno::make_shared<PhongDirLight>(tenno::move (phong_dir));
9777 auto phong_point =
98- tenno::make_shared<PhongPointLight>(PhongPointLight ()
99- .set_strength (1 .8f ));
78+ PhongPointLight ()
79+ .set_strength (1 .8f );
80+ auto phong_point_ptr =
81+ tenno::make_shared<PhongPointLight>(tenno::move (phong_point));
10082
83+ // Setup scene
84+
85+ auto camera_builder =
86+ Camera::Builder ()
87+ .projection_type (Camera::ProjectionType::Perspective)
88+ .position (Camera::Aircraft::Builder ()
89+ .pos ({0 .0f , 0 .0f , 0 .0f })
90+ .build ())
91+ .fov (30 .0f );
92+ auto scene = Scene (camera_builder);
93+ auto root_node = scene.get_root ();
94+
95+ auto model_builder =
96+ Model::Builder ()
97+ .path (" examples/assets/models/backpack/backpack.obj" )
98+ .transform (Transform ()
99+ .translate (glm::vec3 (25 .0f , 0 .0f , 0 .0f ))
100+ .rotate_y (-90 .0f )
101+ .scale (glm::vec3 (1.0 )))
102+ .texture_props (Texture::Properties ()
103+ .flipped (true ))
104+ .material (tenno::move (material));
101105 auto model_component =
102- tenno::make_shared<ModelNodeComponent>(model );
106+ tenno::make_shared<ModelNodeComponent>(model_builder );
103107 auto dir_light_component =
104- tenno::make_shared<DirLightNodeComponent>(phong_dir );
108+ tenno::make_shared<DirLightNodeComponent>(phong_dir_ptr );
105109 auto point_light_component =
106- tenno::make_shared<PointLightNodeComponent>(phong_point );
110+ tenno::make_shared<PointLightNodeComponent>(phong_point_ptr );
107111
108- auto scene = Scene (camera);
109- auto root_node = scene.get_root ();
110-
111112 Scene::add_component (root_node, model_component);
112113 Scene::add_component (root_node, dir_light_component);
113114 Scene::add_component (root_node, point_light_component);
114115
115116 // Camera movement
117+
118+ auto camera = scene.get_camera ();
116119 glm::vec3 acceleration = glm::vec3 (0.0 );
117120 glm::vec3 speed = glm::vec3 (0.0 );
118121
119122 Mouse mouse = {};
120123 mouse.set_sensitivity (0 .05f );
121124 bool capture_mouse = true ;
122-
125+
123126 Input::add_mouse_callback (" rotate_camera" ,
124- [camera, &mouse, &capture_mouse](double x, double y)
127+ [& camera, &mouse, &capture_mouse](double x, double y)
125128 {
126129 if (!capture_mouse) return ;
127130
@@ -213,10 +216,10 @@ void update_camera(tenno::shared_ptr<Camera> camera,
213216 if (acceleration.z < -MAX_ACCELERATION)
214217 acceleration.z = -MAX_ACCELERATION;
215218
216- speed += (acceleration - FRICTION * speed) * delta_time;
219+ speed += (acceleration - FRICTION * speed) * delta_time;
217220 acceleration += -acceleration * FRICTION * delta_time;
218221
219- auto pos = camera->get_pos ();
222+ auto pos = camera->get_pos ();
220223 auto apos = std::get<Camera::Aircraft>(pos);
221224
222225 apos.pos += camera->get_front () * speed.x ;
0 commit comments