diff options
Diffstat (limited to 'dev/mesh-demo/example.cc')
-rw-r--r-- | dev/mesh-demo/example.cc | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/dev/mesh-demo/example.cc b/dev/mesh-demo/example.cc new file mode 100644 index 0000000..759b09b --- /dev/null +++ b/dev/mesh-demo/example.cc @@ -0,0 +1,107 @@ +/** CSci-4611 In-Class Example */ + +#include "Example.h" + +#include <iostream> +#include <sstream> + + + +Example::Example() : GraphicsApp(1024,768, "MinGfx Example") { +} + + +Example::~Example() { +} + + +void Example::UpdateSimulation(double dt) { +} + + +void Example::InitOpenGL() { + // Set up the camera in a good position to see the entire scene + proj_matrix_ = Matrix4::Perspective(60.0f, aspect_ratio(), 0.01f, 100.0f); + view_matrix_ = Matrix4::LookAt(Point3(0,0,3), Point3(0,0,0), Vector3(0,1,0)); + glClearColor(1,1,1,1); + + + // EXAMPLE 1: Load the mesh from a file + teapot_mesh_.LoadFromOBJ(Platform::FindMinGfxDataFile("teapot.obj")); + + + + + // EXAMPLE 2: Create the mesh by adding triangles one at a time + int tri_id; + // add a first triangle + tri_id = triangles_mesh_.AddTriangle(Point3(0,0,0), Point3(1,0,0), Point3(1,1,0)); + // set attributes for the vertices + triangles_mesh_.SetNormals(tri_id, Vector3(0,0,1), Vector3(0,0,1), Vector3(0,0,1)); + // add a second triangle and attributes + tri_id = triangles_mesh_.AddTriangle(Point3(0,0,0), Point3(1,1,0), Point3(0,1,0)); + triangles_mesh_.SetNormals(tri_id, Vector3(0,0,1), Vector3(0,0,1), Vector3(0,0,1)); + // call this when done to save to the GPU + triangles_mesh_.UpdateGPUMemory(); + + + + + + // EXAMPLE 3: Create the mesh by setting the vertex and index arrays directly + std::vector<unsigned int> indices; + std::vector<Point3> vertices; + std::vector<Vector3> normals; + + // four vertices, each requires 3 floats: (x,y,z) + vertices.push_back(Point3(0,0,0)); + vertices.push_back(Point3(1,0,0)); + vertices.push_back(Point3(1,1,0)); + vertices.push_back(Point3(0,1,0)); + + // four normals, each requires 3 floats: (x,y,z) + normals.push_back(Vector3(0,0,1)); + normals.push_back(Vector3(0,0,1)); + normals.push_back(Vector3(0,0,1)); + normals.push_back(Vector3(0,0,1)); + + // indices into the arrays above for the first triangle + indices.push_back(0); + indices.push_back(1); + indices.push_back(2); + + // indices for the second triangle, note some are reused + indices.push_back(0); + indices.push_back(2); + indices.push_back(3); + + indexed_tris_mesh_.SetVertices(vertices); + indexed_tris_mesh_.SetNormals(normals); + indexed_tris_mesh_.SetIndices(indices); + indexed_tris_mesh_.UpdateGPUMemory(); + +} + + +void Example::DrawUsingOpenGL() { + // draws a set of axes at the world origin, since we are passing the identity + // matrix for the "model" matrix. + Matrix4 identity; + quick_shapes_.DrawAxes(identity, view_matrix_, proj_matrix_); + + + + Matrix4 teapot_transform = Matrix4::Translation(Vector3(-1.5,0,0)); + shader_.Draw(teapot_transform, view_matrix_, proj_matrix_, &teapot_mesh_, DefaultShader::MaterialProperties()); + + Matrix4 mesh2_transform = Matrix4::Translation(Vector3(-0.5,-0.5,0)); + shader_.Draw(mesh2_transform, view_matrix_, proj_matrix_, &triangles_mesh_, DefaultShader::MaterialProperties()); + + Matrix4 mesh3_transform = Matrix4::Translation(Vector3(1,-0.5,0)); + shader_.Draw(mesh3_transform, view_matrix_, proj_matrix_, &indexed_tris_mesh_, DefaultShader::MaterialProperties()); +} + + + + + |