@@ -74,15 +74,7 @@ int Rendering::check_mouse_over_models() {
74
74
float min_t = std::numeric_limits<float >::max ();
75
75
for (auto it = game_objects.begin (); it != game_objects.end (); it++) {
76
76
GameObject* game_object = it->second ;
77
- glm::vec3 ray_dir_model = game_object->model_inv * glm::vec4 (ray_dir, 0 .0f );
78
- glm::vec3 ray_origin_model = game_object->model_inv * glm::vec4 (camera_viewport->Position , 1 .0f );
79
-
80
- /*
81
- if (game_object.idx_loaded_models != 0) {
82
- continue;
83
- }*/
84
-
85
- if (loaded_models[game_object->idx_loaded_models ]->intersected_ray (ray_origin_model, ray_dir_model, t)) {
77
+ if (game_object->intersected_ray (this , ray_dir, camera_viewport->Position , t)) {
86
78
if (t < min_t ) {
87
79
min_t = t;
88
80
key_intersected_object = it->first ;
@@ -104,39 +96,69 @@ void Rendering::initialize_game_objects() {
104
96
int backpack1_key = key_generator->generate_key ();
105
97
game_objects[backpack1_key] = backpack1;
106
98
107
- GameObject* backpack2 = new GameObject (0 , glm::vec3 (6 .0f , 4 .0f , -15 .0f ), glm::vec3 (0 .5f , 0 .5f , 0 .5f ), glm::vec3 (1 .0f , 0 .0f , 0 .0f ), 60 . 0f );
99
+ GameObject* backpack2 = new GameObject (0 , glm::vec3 (6 .0f , 4 .0f , -15 .0f ), glm::vec3 (0 .5f , 0 .5f , 0 .5f ), glm::vec3 (60 .0f , 0 .0f , 0 .0f ));
108
100
int backpack2_key = key_generator->generate_key ();
109
101
game_objects[backpack2_key] = backpack2;
110
102
111
- GameObject* cylinder1 = new GameObject (1 , glm::vec3 (3 .0f , 7 .0f , -6 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (0 . 8f , 1 .0f , 0 . 3f ), 60 . 0f , glm::vec3 (1 .0f , 1 .0f , 0 .0f ));
103
+ GameObject* cylinder1 = new GameObject (1 , glm::vec3 (3 .0f , 7 .0f , -6 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (45 . 0f , 60 .0f , 20 . 0f ) , glm::vec3 (1 .0f , 1 .0f , 0 .0f ));
112
104
int cylinder1_key = key_generator->generate_key ();
113
105
game_objects[cylinder1_key] = cylinder1;
114
106
115
- GameObject* cone1 = new GameObject (2 , glm::vec3 (-3 .0f , 7 .0f , -6 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (1 . 0f , 0 .0f , 0 .0f ) , 0 .0f , glm::vec3 (0 .0f , 1 .0f , 0 .0f ));
107
+ GameObject* cone1 = new GameObject (2 , glm::vec3 (-3 .0f , 7 .0f , -6 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ) , glm::vec3 (0 .0f , 1 .0f , 0 .0f ));
116
108
int cone1_key = key_generator->generate_key ();
117
109
game_objects[cone1_key] = cone1;
118
110
119
- GameObject* cylinder2 = new GameObject (1 , glm::vec3 (-3 .0f , -7 .0f , -6 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (1 . 0f , 0 .0f , 0 .0f ) , 0 .0f , glm::vec3 (0 .0f , 0 .0f , 1 .0f ));
111
+ GameObject* cylinder2 = new GameObject (1 , glm::vec3 (-3 .0f , -7 .0f , -6 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ) , glm::vec3 (0 .0f , 0 .0f , 1 .0f ));
120
112
int cylinder2_key = key_generator->generate_key ();
121
113
game_objects[cylinder2_key] = cylinder2;
122
114
115
+
116
+
117
+ GameObject* coord_axes_3D = new GameObject (-1 , glm::vec3 (0 .0f , -3 .0f , -3 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ), glm::vec3 (0 .0f , 0 .0f , 1 .0f ));
118
+ int coord_axes_3D_key = key_generator->generate_key ();
119
+ game_objects[coord_axes_3D_key] = coord_axes_3D;
120
+
121
+ GameObject* x_arrow_body = new GameObject (1 , glm::vec3 (0 .0f , 0 .0f , 1 .5f ), glm::vec3 (0 .1f , 0 .1f , 3 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ), glm::vec3 (1 .0f , 0 .0f , 0 .0f ));
122
+ x_arrow_body->set_model_matrices_type1 (coord_axes_3D);
123
+ coord_axes_3D->children_game_objects .push_back (x_arrow_body);
123
124
125
+ GameObject* y_arrow_body = new GameObject (1 , glm::vec3 (0 .0f , 1 .5f , 0 .0f ), glm::vec3 (0 .1f , 0 .1f , 3 .0f ), glm::vec3 (90 .0f , 0 .0f , 0 .0f ), glm::vec3 (0 .0f , 1 .0f , 0 .0f ));
126
+ y_arrow_body->set_model_matrices_type1 (coord_axes_3D);
127
+ coord_axes_3D->children_game_objects .push_back (y_arrow_body);
128
+
129
+ GameObject* z_arrow_body = new GameObject (1 , glm::vec3 (1 .5f , 0 .0f , 0 .0f ), glm::vec3 (0 .1f , 0 .1f , 3 .0f ), glm::vec3 (0 .0f , 90 .0f , 0 .0f ), glm::vec3 (0 .0f , 0 .0f , 1 .0f ));
130
+ z_arrow_body->set_model_matrices_type1 (coord_axes_3D);
131
+ coord_axes_3D->children_game_objects .push_back (z_arrow_body);
132
+
133
+ GameObject* x_arrow_head = new GameObject (2 , glm::vec3 (0 .0f , 0 .0f , 3 .0f ), glm::vec3 (0 .3f , 0 .3f , 0 .6f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ), glm::vec3 (1 .0f , 0 .0f , 0 .0f ));
134
+ x_arrow_head->set_model_matrices_type1 (coord_axes_3D);
135
+ coord_axes_3D->children_game_objects .push_back (x_arrow_head);
136
+
137
+ GameObject* y_arrow_head = new GameObject (2 , glm::vec3 (0 .0f , 3 .0f , 0 .0f ), glm::vec3 (0 .3f , 0 .3f , 0 .6f ), glm::vec3 (-90 .0f , 0 .0f , 0 .0f ), glm::vec3 (0 .0f , 1 .0f , 0 .0f ));
138
+ y_arrow_head->set_model_matrices_type1 (coord_axes_3D);
139
+ coord_axes_3D->children_game_objects .push_back (y_arrow_head);
140
+
141
+ GameObject* z_arrow_head = new GameObject (2 , glm::vec3 (3 .0f , 0 .0f , 0 .0f ), glm::vec3 (0 .3f , 0 .3f , 0 .6f ), glm::vec3 (0 .0f , 90 .0f , 0 .0f ), glm::vec3 (0 .0f , 0 .0f , 1 .0f ));
142
+ z_arrow_head->set_model_matrices_type1 (coord_axes_3D);
143
+ coord_axes_3D->children_game_objects .push_back (z_arrow_head);
144
+
145
+
124
146
125
- GameObject* point_light1 = new PointLight (1 , glm::vec3 (1 .0f , 1 .0f , -3 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (1 . 0f , 0 .0f , 0 .0f ) , 0 .0f , glm::vec3 (1 .0f , 1 .0f , 1 .0f ), false ,
147
+ GameObject* point_light1 = new PointLight (1 , glm::vec3 (1 .0f , 1 .0f , -3 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ) , glm::vec3 (1 .0f , 1 .0f , 1 .0f ), false ,
126
148
glm::vec3 (0 .05f , 0 .05f , 0 .05f ), glm::vec3 (0 .8f , 0 .8f , 0 .8f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), 1 .0f , 0 .045f , 0 .0075f );
127
149
int point_light1_key = key_generator->generate_key ();
128
150
game_objects[point_light1_key] = point_light1;
129
151
point_lights[point_light1_key] = (PointLight*)point_light1;
130
152
131
153
132
- GameObject* directional_light1 = new DirectionalLight (1 , glm::vec3 (-5 .0f , 5 .0f , -3 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (1 . 0f , 0 .0f , 0 .0f ) , 0 .0f , glm::vec3 (1 .0f , 1 .0f , 1 .0f ), false ,
154
+ GameObject* directional_light1 = new DirectionalLight (1 , glm::vec3 (-5 .0f , 5 .0f , -3 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ) , glm::vec3 (1 .0f , 1 .0f , 1 .0f ), false ,
133
155
glm::vec3 (0 .05f , 0 .05f , 0 .05f ), glm::vec3 (0 .4f , 0 .4f , 0 .4f ), glm::vec3 (0 .8f , 0 .8f , 0 .8f ), glm::vec3 (3 .0f , -4 .0f , -3 .0f ));
134
156
int directional_light1_key = key_generator->generate_key ();
135
157
game_objects[directional_light1_key] = directional_light1;
136
158
directional_lights[directional_light1_key] = (DirectionalLight*)directional_light1;
137
159
138
160
139
- GameObject* spot_light1 = new SpotLight (1 , glm::vec3 (-5 .0f , -5 .0f , -3 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (1 . 0f , 0 .0f , 0 .0f ) , 0 .0f , glm::vec3 (1 .0f , 1 .0f , 1 .0f ), false ,
161
+ GameObject* spot_light1 = new SpotLight (1 , glm::vec3 (-5 .0f , -5 .0f , -3 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (0 .0f , 0 .0f , 0 .0f ) , glm::vec3 (1 .0f , 1 .0f , 1 .0f ), false ,
140
162
glm::vec3 (0 .0f , 0 .0f , 0 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (1 .0f , 1 .0f , 1 .0f ), glm::vec3 (5 .0f , 5 .0f , -3 .0f ),
141
163
glm::cos (glm::radians (12 .5f )), glm::cos (glm::radians (15 .0f )), 1 .0f , 0 .09f , 0 .032f );
142
164
int spot_light1_key = key_generator->generate_key ();
@@ -208,11 +230,7 @@ void Rendering::render_viewport() {
208
230
// render all the game objects
209
231
for (auto it = game_objects.begin (); it != game_objects.end (); it++) {
210
232
GameObject* game_object = it->second ;
211
- ourShader->setVec3 (" model_color" , game_object->color );
212
- ourShader->setMat4 (" model" , game_object->model );
213
- ourShader->setMat3 (" model_normals" , glm::mat3 (glm::transpose (glm::inverse (game_object->model ))));
214
- ourShader->setMat4 (" model_view_projection" , projection * view * game_object->model );
215
- loaded_models[game_object->idx_loaded_models ]->draw (*ourShader, game_object->is_selected , this );
233
+ game_object->draw (ourShader, this );
216
234
}
217
235
218
236
glBindFramebuffer (GL_FRAMEBUFFER, 0 );
0 commit comments