Title: Meshes
1Meshes
23D Surfaces
33D Surfaces
43D Surfaces
53D Surfaces
63D Surfaces
73D Surfaces
Vertex Table
83D Surfaces
Polygon Table
Vertex Table
93D Surfaces
Polygon Table
Vertex Table
103D File Formats
- Way too many!
- OBJ
- STL
- MA
- PLY
- MAX, 3DS
- BLEND
- DAW
- LWO
- X
- .
11OBJ File Format (Simplified)
- Text Format Easy to read!
- Line based file consisting of
- Vertices (starts with v)
- Faces (starts with f)
- Comments (starts with )
12OBJ File Format (Simplified)
- Vertex Definition
- v x y z vertex with coordinates (x,y,z)
- vt u v texture coordinates (u,v)
- vn nx ny nz normal (nx,ny,nz)
13OBJ File Format (Simplified)
- Face Definition
- f g1/t1/n1 g2/t2/n2
- Faces may be variable length!
- Indexing starts at 1 not 0!
- First index is guaranteed to be geometry index
- ti, ni are optional
14OBJ File Format Example
- This is a comment
- v 0 0 0
- v 0 1 0
- v 1 0 0
- v 0 0 1
- f 1 2 3
- f 1 3 4
- f 1 4 2
- f 2 3 4
15OBJ File Format Example
- This is a comment
- v 0 0 0
- v 0 1 0
- v 1 0 0
- v 0 0 1
- vn -1 -1 -1
- vn 1 1 1
- vn -1 1 1
- vn 1 -1 1
- f 1//2 2//1 3//3
- f 1//2 3//3 4//4
- f 1//2 4//4 2//1
- f 2//1 3//3 4//4
16OBJ File Format Complications
- Vertices may appear after faces
- Faces may not be triangles (must triangulate)
- Faces may use negative indexing
- Not all OBJ files conform to the OBJ standard
17Drawing 3D Objects with OpenGL
- Immediate Mode
- Display Lists
- Vertex Arrays
- Vertex Buffer Objects
18Immediate Mode
- glBegin ( GL_TRIANGLES )
- glNormal3f ( nx1, ny1, nz1 )
- glVertex3f ( x1, y1, z1 )
- glNormal3f ( nx2, ny2, nz2 )
- glVertex3f ( x2, y2, z2 )
-
- glEnd ( )
19Immediate Mode
- Advantages
- Easy to send a few polygons to OpenGL
- Disadvantages
- Lots of data transferred on the stack
- Lots of function calls
- Vertices duplicated many times
- Really, really slow
20Display Lists
- Initialize display list
- firstList glGenLists ( numLists )
- glNewList ( firstList, GL_COMPILE_AND_EXECUTE )
- // draw model in immediate mode
- glEndList ( )
- Draw the display list
- glCallList ( firstList )
21Display Lists
- Relies on graphics driver for optimization
- Advantages
- Faster than immediate mode
- Disadvantages
- Still not great performance
22Vertex Arrays
- glEnableClientState ( GL_(VERTEX/TEXTURE_COORD/NOR
MAL)_ARRAY ) - glVertexPointer ( numComp, GL_FLOAT, bytes to
next vertex, pointer to geometry) - glTexCoordPointer ( numComp, GL_FLOAT, bytes to
next texture coord, pointer to texture coords) - glNormalPointer ( GL_FLOAT, bytes to next normal,
pointer to normals ) - glDrawElements ( GL_TRIANGLES, number of indices
in array, GL_UNSIGNED_INT, pointer to index
array) - glDisableClientState ( GL_(VERTEX/TEXTURE_COORD/NO
RMAL)_ARRAY )
23Vertex Arrays
- Advantages
- Only transfers vertices once and not an expected
value of 6 times - Much faster than even display lists (usually)
- Format similar to most mesh formats
- Disadvantages
- Still transfers vertices to GPU every frame
- Bandwidth to GPU very problematic
24Vertex Buffer Objects
- New Functions
- glGenBuffersARB
- glBindBufferARB
- glBufferDataARB
- Use glVertexPointer with NULL pointer as
argument - Use glDrawElements with NULL pointer as argument
25Vertex Buffer Objects
- Advantages
- Can store data directly in video memory or AGP
- Greatly reduces bandwidth problem to GPU
- Disadvantages
- Not supported by MS OpenGL headers
- Must load function pointers out of DLL using
WGLGetProcAddress - Dynamic geometry doesnt get as much benefit
26Performance
Nvidia 7300 GT1 Nvidia 8800 GTX1 AMD Radeon HD 48502 AMD Radeon HD 48503
Immediate Mode 15.5 15.5 21.0 35.0
Display Lists 28.3 22.0 463.5 497.0
Vertex Arrays 33.5 35.5 75.0 280.0
Vertex Buffer Objects 50.0 200.0 476.3 504.0
Frames per second displaying a 413,236 triangle
model. CPU was an Intel Core 2 67001 or Core i7
9402. 3Same as 2 but new drivers.