Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SER332 Lecture 18

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

SER332 Lecture 18

Introduction to Graphics and Game Development
Mesh Data Structure II
(201804)

Avatar for Javier Gonzalez-Sanchez

Javier Gonzalez-Sanchez PRO

March 29, 2018
Tweet

More Decks by Javier Gonzalez-Sanchez

Other Decks in Programming

Transcript

  1. jgs SER332 Introduction to Graphics and Game Development Lecture 18:

    Mesh Data Structure II Javier Gonzalez-Sanchez [email protected] PERALTA 230U Office Hours: By appointment
  2. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 3 jgs

    Creating a Triangulated Plane // Generate vertices in XZ-plane for i = 0 to n for j = 0 to n Create vertex at location (i*xsize, 0, j*ysize) // step 2. Generate indices for i = 0 to ? Create triangle with indices(i, i+1, i+n+1) Create triangle with indices( i+1, i+n+2, i+n+1) xsize ysize vn v0 v1 v n+1 vn+2
  3. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 4 jgs

    Creating a Triangulated Plane // creating a triangulated plane Mesh* createPlane(int arena_width, int arena_depth, int arena_cell) { Mesh *me = new Mesh; int n = arena_width / arena_cell; int m = arena_depth / arena_cell; // vertices for (int i = 0; i<n; i++) { for (int j = 0; j < m; j++) { me->dot_vertex.push_back(Vec3<GLfloat>(i*arena_cell, 0.0, j*arena_cell)); } } // faces for (int i = 0; i<(n*m) - m; i++) { if ((i + 1) % n == 0) continue; me->face_index_vertex.push_back(i); me->face_index_vertex.push_back(i + 1); me->face_index_vertex.push_back(i + n); me->face_index_vertex.push_back(i + 1); me->face_index_vertex.push_back(i+ n + 1); me->face_index_vertex.push_back(i + n); } return me; }
  4. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 5 jgs

    Creating a Triangulated Plane § Use colors to verify right-hand rule.
  5. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 6 jgs

    Creating a Triangulated Cylinder // Generate vertices on top for i = 0 to n angle = (i*360) / (n+1) create vertex at (cos( angle), height, sin(angle)) // Generate vertices on the bottom // same process but height = 0 // Generate vertex in the middle of the top // Generate vertex in the middle of the bottom // Generate triangles on top // Generate triangles on the bottom // Generate triangles on the side v1 Vn+2 v0 Vn+1
  6. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 7 jgs

    Creating a Triangulated Cylinder // create a triangulated cylinder Mesh* createCylinder(int h, int radio) { int n = 100; double angle; Mesh *m =new Mesh; // Generate vertices on top m->vertex.push_back(Vec3<GLfloat>(0.0, h, 0.0)); for (int i = 0; i<n; i++) { angle = (M_PI/180)*(1.0*i*360)/n; m->vertex.push_back(Vec3<GLfloat> (cos(angle)* radio, h, sin(angle)* radio)); } // Generate vertices on bottom for (int i = 0; i<n; i++) { angle = (M_PI/180)*(i*360)/n; m->vertex.push_back(Vec3<GLfloat> (cos(angle)* radio, 0.0, sin(angle)* radio)); }
  7. jgs Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 8

    // Generate triangles on top for (int i = 1; i<=n; i++) { m->vertexIndex.push_back(0); m->vertexIndex.push_back(i); if (i==n) { m->vertexIndex.push_back(1); }else{ m->vertexIndex.push_back(i+1); } } // There is no bottom. Use the floor. // Generate triangles on the side for (int i = 1; i<=n; i++) { m->vertexIndex.push_back(i); m->vertexIndex.push_back(n+i); if (i!=n) { m->vertexIndex.push_back(n+i+1); } else { m->vertexIndex.push_back(n+1); } m->vertexIndex.push_back(i); if (i!=n) { m->vertexIndex.push_back(i+1); m->vertexIndex.push_back(n+i+1); }else{ m->vertexIndex.push_back(1); m->vertexIndex.push_back(n+1); } } return m; }
  8. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 10 jgs

    Creating a Triangulated Cube // Generate vertices on top // Generate vertices on the bottom // Generate triangles on top // Generate triangles on the bottom // Generate triangles on the sides
  9. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 12 jgs

    Source Code § https://github.com/javiergs/SER332/blob/master/Lecture18/main.cpp
  10. Javier Gonzalez-Sanchez | SER332 | Spring 2018 | 13 jgs

    Test Yourselves § Include methods to create cubes, planes, and cylinders § Include methods to create spheres
  11. jgs SER332 Introduction to Graphics Javier Gonzalez-Sanchez [email protected] Spring 2018

    Disclaimer. These slides can only be used as study material for the class SER332 at ASU. They cannot be distributed or used for another purpose.