27
Meshes Dr. Scott Schaefer

Meshes Dr. Scott Schaefer. 3D Surfaces Vertex Table

  • View
    225

  • Download
    1

Embed Size (px)

Citation preview

Meshes

Dr. Scott Schaefer

3D Surfaces

3D Surfaces

3D Surfaces

3D Surfaces

),,( 333 zyx

),,( 222 zyx),,( 111 zyx

3D Surfaces

3D Surfaces

),,,,,,,( zyx nnnvuzyx0),,,,,,,( zyx nnnvuzyx1

),,,,,,,( zyx nnnvuzyx2),,,,,,,( zyx nnnvuzyx3

),,,,,,,( zyx nnnvuzyxm

Vertex Table

3D Surfaces

),,,,,,,( zyx nnnvuzyx0),,,,,,,( zyx nnnvuzyx1

),,,,,,,( zyx nnnvuzyx2),,,,,,,( zyx nnnvuzyx3

),,,,,,,( zyx nnnvuzyxm

Vertex Table Polygon Table

0

1

2

3

k

)1,3,0(

)1,2,7(

)1,2,8(

)4,8,2(

)9,32,10(

3D Surfaces

),,,,,,,( zyx nnnvuzyx0),,,,,,,( zyx nnnvuzyx1

),,,,,,,( zyx nnnvuzyx2),,,,,,,( zyx nnnvuzyx3

),,,,,,,( zyx nnnvuzyxm

Vertex Table Polygon Table

0

1

2

3

k

)1,3,0(

)1,2,7(

)1,2,8(

)4,8,2(

)9,32,10(

0

3

1

3D File Formats

• Way too many!• OBJ• STL• MA• PLY• MAX, 3DS• BLEND• DAW• LWO• X• ….

OBJ File Format (Simplified)

• Text Format – Easy to read!

• Line based file consisting of• Vertices (starts with “v”)• Faces (starts with “f”)• Comments (starts with “#”)

OBJ 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)

OBJ 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 guarantee to be geometry

index• ti, ni are optional

OBJ File Format – Example

# This is a commentv 0 0 0v 0 1 0v 1 0 0v 0 0 1f 1 2 3f 1 3 4f 1 4 2f 2 3 4

OBJ File Format – Example

# This is a commentv 0 0 0v 0 1 0v 1 0 0v 0 0 1vn -1 -1 -1vn 1 1 1vn -1 1 1vn 1 -1 1

f 1//2 2//1 3//3f 1//2 3//3 4//4f 1//2 4//4 2//1f 2//1 3//3 4//4

OBJ File Format – Complications

• Vertices may appear after faces• Faces may not be triangles (must

triangulate)• Faces may use negative indexing

3D File Formats

• 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

Drawing 3D Objects with OpenGL

• Immediate Mode

• Display Lists

• Vertex Arrays

• Vertex Buffer Objects

Immediate Mode

glBegin ( GL_TRIANGLES );

glNormal3f ( nx1, ny1, nz1 );

glVertex3f ( x1, y1, z1 );

glNormal3f ( nx2, ny2, nz2 );

glVertex3f ( x2, y2, z2 );

glEnd ( );

Immediate 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

Display 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 );

Display Lists

• Relies on graphics driver for optimization

• Advantages• Faster than immediate mode

• Disadvantages• Still not great performance

Vertex Arrays

• glEnableClientState ( GL_(VERTEX/TEXTURE_COORD/NORMAL)_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/NORMAL)_ARRAY )

Vertex Arrays

• Advantages• Only transfers vertices once and not an

expected value of 6 times• Much faster than even display lists• Format similar to most mesh formats

• Disadvantages• Still transfers vertices to GPU every frame• Bandwidth to GPU very problematic

Vertex Buffer Objects

• New Functions• glGenBuffersARB• glBindBufferARB• glBufferDataARB

• Use glVertexPointer… with NULL pointer as argument

• Use glDrawElements with NULL pointer as argument

Vertex 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 does get as much benefit

Performance

Nvidia 7300 GT Nvidia 8800 GTX

Immediate Mode 15.5 15.5

Display Lists 28.3 22.0

Vertex Arrays 33.5 35.5

Vertex Buffer Objects 50.0 200.0

Frames per second displaying a 413,236 triangle model. CPU was an Intel Core 2 6700.