Changeset f9a242b in opengl-game for new-game.cpp


Ignore:
Timestamp:
May 25, 2018, 4:04:45 AM (6 years ago)
Author:
Dmitry Portnoy <dmp1488@…>
Branches:
feature/imgui-sdl, master, points-test
Children:
e3ca955
Parents:
4f3262f
Message:

Create addObjectToScene function to automate some aspects of SceneObject creation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • new-game.cpp

    r4f3262f rf9a242b  
    104104void printVector(string label, vec3 v);
    105105void print4DVector(string label, vec4 v);
     106
     107void addObjectToScene(SceneObject& obj);
    106108
    107109void renderMainMenu();
     
    259261   GLuint texture_sp = loadShaderProgram("./texture.vert", "./texture.frag");
    260262
     263   SceneObject obj;
    261264   mat4 T_model, R_model;
    262265
    263266   // triangle
    264    objects.push_back(SceneObject());
    265    objects[0].id = 0;
    266    objects[0].shader_program = color_sp;
    267    objects[0].vertex_vbo_offset = 0;
    268    objects[0].points = {
     267   obj = SceneObject();
     268   obj.shader_program = color_sp;
     269   obj.points = {
    269270       0.0f,  0.5f,  0.0f,
    270271      -0.5f, -0.5f,  0.0f,
     
    274275       0.0f,  0.5f,  0.0f,
    275276   };
    276    objects[0].colors = {
     277   obj.colors = {
    277278      1.0f, 0.0f, 0.0f,
    278279      0.0f, 0.0f, 1.0f,
     
    282283      1.0f, 0.0f, 0.0f,
    283284   };
    284    objects[0].texcoords = {
     285   obj.texcoords = {
    285286      1.0f, 1.0f,
    286287      0.0f, 1.0f,
     
    290291      1.0f, 0.0f
    291292   };
    292    objects[0].normals = {
    293        0.0f,  0.0f,  1.0f,
    294        0.0f,  0.0f,  1.0f,
    295        0.0f,  0.0f,  1.0f,
    296        0.0f,  0.0f, -1.0f,
    297        0.0f,  0.0f, -1.0f,
    298        0.0f,  0.0f, -1.0f,
    299    };
    300    objects[0].selected_colors = {
    301       0.0f, 1.0f, 0.0f,
    302       0.0f, 1.0f, 0.0f,
    303       0.0f, 1.0f, 0.0f,
    304       0.0f, 1.0f, 0.0f,
    305       0.0f, 1.0f, 0.0f,
    306       0.0f, 1.0f, 0.0f,
    307    };
    308    objects[0].num_points = objects[0].points.size() / 3;
     293   obj.selected_colors = {
     294      0.0f, 1.0f, 0.0f,
     295      0.0f, 1.0f, 0.0f,
     296      0.0f, 1.0f, 0.0f,
     297      0.0f, 1.0f, 0.0f,
     298      0.0f, 1.0f, 0.0f,
     299      0.0f, 1.0f, 0.0f,
     300   };
    309301
    310302   T_model = translate(mat4(), vec3(0.45f, 0.0f, 0.0f));
    311303   R_model = rotate(mat4(), 0.0f, vec3(0.0f, 1.0f, 0.0f));
    312    objects[0].model_mat = T_model*R_model;
     304   obj.model_mat = T_model*R_model;
     305
     306   addObjectToScene(obj);
    313307
    314308   // square
    315    objects.push_back(SceneObject());
    316    objects[1].id = 1;
    317    objects[1].shader_program = texture_sp;
    318    objects[1].vertex_vbo_offset = 6;
    319    objects[1].points = {
     309   obj = SceneObject();
     310   obj.shader_program = texture_sp;
     311   obj.points = {
    320312       0.5f,  0.5f,  0.0f,
    321313      -0.5f,  0.5f,  0.0f,
     
    325317       0.5f, -0.5f,  0.0f,
    326318   };
    327    objects[1].colors = {
     319   obj.colors = {
    328320      1.0f, 0.0f, 0.0f,
    329321      0.0f, 0.0f, 1.0f,
     
    333325      1.0f, 0.0f, 0.0f,
    334326   };
    335    objects[1].texcoords = {
     327   obj.texcoords = {
    336328      1.0f, 1.0f,
    337329      0.0f, 1.0f,
     
    341333      1.0f, 0.0f
    342334   };
    343    objects[1].normals = {
    344       0.0f,  0.0f,  1.0f,
    345       0.0f,  0.0f,  1.0f,
    346       0.0f,  0.0f,  1.0f,
    347       0.0f,  0.0f,  1.0f,
    348       0.0f,  0.0f,  1.0f,
    349       0.0f,  0.0f,  1.0f,
    350    };
    351    objects[1].selected_colors = {
     335   obj.selected_colors = {
    352336      0.0f, 0.6f, 0.9f,
    353337      0.0f, 0.6f, 0.9f,
     
    357341      0.0f, 0.6f, 0.9f,
    358342   };
    359    objects[1].num_points = objects[1].points.size() / 3;
    360343
    361344   T_model = translate(mat4(), vec3(-0.5f, 0.0f, -1.00f));
    362345   R_model = rotate(mat4(), 0.5f, vec3(0.0f, 1.0f, 0.0f));
    363    objects[1].model_mat = T_model*R_model;
     346   obj.model_mat = T_model*R_model;
     347
     348   addObjectToScene(obj);
     349
     350   // player ship
     351   obj = SceneObject();
     352   obj.shader_program = color_sp;
     353   obj.points = {
     354      0.0f,  0.5f,  0.0f,
     355      -0.5f, -0.5f,  0.0f,
     356      0.5f, -0.5f,  0.0f,
     357      0.5f, -0.5f,  0.0f,
     358      -0.5f, -0.5f,  0.0f,
     359      0.0f,  0.5f,  0.0f,
     360   };
     361   obj.colors = {
     362      0.0f, 0.0f, 0.3f,
     363      0.0f, 0.0f, 0.3f,
     364      0.0f, 0.0f, 0.3f,
     365      0.0f, 0.0f, 0.3f,
     366      0.0f, 0.0f, 0.3f,
     367      0.0f, 0.0f, 0.3f,
     368   };
     369   obj.texcoords = {
     370      1.0f, 1.0f,
     371      0.0f, 1.0f,
     372      0.0f, 0.0f,
     373      1.0f, 1.0f,
     374      0.0f, 0.0f,
     375      1.0f, 0.0f
     376   };
     377   obj.selected_colors = {
     378      0.0f, 1.0f, 0.0f,
     379      0.0f, 1.0f, 0.0f,
     380      0.0f, 1.0f, 0.0f,
     381      0.0f, 1.0f, 0.0f,
     382      0.0f, 1.0f, 0.0f,
     383      0.0f, 1.0f, 0.0f,
     384   };
     385
     386   T_model = translate(mat4(), vec3(0.0f, -0.65f, 0.0f));
     387   R_model = rotate(mat4(), -1.0f, vec3(1.0f, 0.0f, 0.0f));
     388   obj.model_mat = T_model * R_model;
     389
     390   addObjectToScene(obj);
    364391
    365392   vector<SceneObject>::iterator obj_it;
     
    10231050}
    10241051
     1052void addObjectToScene(SceneObject& obj) {
     1053   obj.id = objects.size(); // currently unused
     1054   obj.num_points = obj.points.size() / 3;
     1055
     1056   static GLint vbo_offset = 0;
     1057   obj.vertex_vbo_offset = vbo_offset;
     1058   vbo_offset += obj.num_points;
     1059
     1060   obj.normals.reserve(obj.points.size());
     1061   for (int i = 0; i < obj.points.size(); i += 9) {
     1062      vec3 point1 = vec3(obj.points[i], obj.points[i+1], obj.points[i + 2]);
     1063      vec3 point2 = vec3(obj.points[i+3], obj.points[i + 4], obj.points[i + 5]);
     1064      vec3 point3 = vec3(obj.points[i+6], obj.points[i + 7], obj.points[i + 8]);
     1065
     1066      vec3 normal = normalize(cross(point2 - point1, point3 - point1));
     1067
     1068      // Add the same normal for all 3 points
     1069      for (int j = 0; j < 3; j++) {
     1070         obj.normals.push_back(normal.x);
     1071         obj.normals.push_back(normal.y);
     1072         obj.normals.push_back(normal.z);
     1073      }
     1074   }
     1075
     1076   objects.push_back(obj);
     1077}
     1078
    10251079void renderMainMenu() {
    10261080}
Note: See TracChangeset for help on using the changeset viewer.