Difference between revisions of "Discussion3S16"

From Immersive Visualization Lab Wiki
Jump to: navigation, search
(Added initial draft for centering.)
(Finished faces draft.)
Line 33: Line 33:
  
 
==Faces==
 
==Faces==
In project 1, we parsed vertices and normals. What other lines were there in <code>.OBJ</code> files?
+
In project 1, we parsed vertices and normals. What other lines were there in <code>.OBJ</code> files? If you answered lines that started with <code>f</code>, or ''faces'' you're correct! (The section title hopefully gave it away). The face lines are formatted as described in [[Discussion1S16#The OBJ file format|Week 1's discussion]], and that shows how to parse and understand them.
 +
 
 +
In this discussion, we wanted to cover why there are face lines to begin with. Let's see how we might specify 6 triangles to make the following hexagon:
 +
 
 +
[[File:Face_objs.PNG|800px]]
 +
 
 +
Note how when we don't use faces, and list faces simply by the three vertices that make them, we end up duplicating many vertices and use up more lines. This increases our parsing time polynomially as well as make our file sizes larger. The use of face specifications help reduce this.
  
 
==OpenGL Buffer Objects==
 
==OpenGL Buffer Objects==
  
 
==GLSL Structure==
 
==GLSL Structure==

Revision as of 22:56, 11 April 2016

Contents

Overview

Week 3 discussion recap (04/11/16)

Slides: download here

Object Centering

We can't expect our objects to be centered when we first parse our .OBJ files. The bear obj we parsed for Project1 are good examples. What can we do if we want to center our objects? How may we go about this?

Well the first job would be to find the center of our object right? Let's go through how we might accomplish that.

The Koan of Finding Your Center

This is going to be a slight modification to our parsing code so that we can find where the minimum point and the maximum point lie in our .OBJ file.

  • Loop and parse every vertex in the .OBJ file.
  • Loop through the vertices to find the minX, minY, minZ and maxX, maxY, maxZ.
    • Hint: You would want to use infinity and negative infinity in some way.
  • Find the average: avgX, avgY, avgZ
  • Loop through all vertices and subtract avgX, avgY, avgZ from all coordinates.

Try and draw a simple non-centered 2d rectangle to visualize what this would look like. Do you see how this would center our object?

Here we looped through the list of vertices three times to center our object. Can we do better and reduce the number of iterations?

The Zen of Filling The Room

Once we've centered our object, we can scale our object. Our goal is to fit the object into a standard cube(a 2x2x2 cube, with all vertices in the range [-1,1]) so that all objects start from the same size.

Here's an idea of how we might go about this.

  • Find the longest dimension between the axes x, y, or z.
  • Loop through every vertex and scale them(divide) by the longest axis.

Again, try drawing a simple centered 2d non-unit rectangle to visualize what this would look like. Do you see the positions fitting in the range [-1,1]?

Faces

In project 1, we parsed vertices and normals. What other lines were there in .OBJ files? If you answered lines that started with f, or faces you're correct! (The section title hopefully gave it away). The face lines are formatted as described in Week 1's discussion, and that shows how to parse and understand them.

In this discussion, we wanted to cover why there are face lines to begin with. Let's see how we might specify 6 triangles to make the following hexagon:

Face objs.PNG

Note how when we don't use faces, and list faces simply by the three vertices that make them, we end up duplicating many vertices and use up more lines. This increases our parsing time polynomially as well as make our file sizes larger. The use of face specifications help reduce this.

OpenGL Buffer Objects

GLSL Structure