Modelling & Representation
-
Upload
kiara-nieves -
Category
Documents
-
view
33 -
download
0
description
Transcript of Modelling & Representation
Modelling & Representation
Representation of Objects in 3D
Parametric Surface: (R2->R3)Polygon mesh High-order surface patch
Implicit: (Solid/Volumetric:R3->0) implicit VolxelsCSG
Polygon Mesh
must be convex better be planar or triangulation is required can be represented either be a loop of vertices
or edges mostly be a loop of vertices
the order can be either clockwise or counter-clockwise
two popular representations polygon soup indexed-face mesh
Polygon Soup
face = a list of vertex coordinatesobject= a list of faces
Indexed-face Mesh
All vertex coordinates are placed in an array
Faces = a list of indices to the vertex coordinate array
Objects=a list of such indexed faces
Example
X Z
Y
V4 (-1,0,0)
V1 (0,1,0)
V5 (0,0,-1)
V3 (0,0,1)
V2 (1,0,0)
Example) in Polygon Soup
Pyramid={{{0,1,0},{0,0,1},{1,0,0}},...,{{0,0,1},{-1,0,0},{0,0,-1},{1,0,0}}}
Example) in Indexed-face Mesh
V1 (0,1,0) V[0]
V2 (1,0,0) V[1]
V3 (0,0,1) V[2]
V4 (-1,0,0) V[3]
V5 (0,0,-1) V[4]
F1 (v1,v3,v2)(0,2,1) F[0]
F2 (v1,v4,v3)(0,3,2) F[1]
F3 (v1,v5,v4)(0,4,3) F[2]
F4 (v1,v2,v5)(0,1,4) F[3]
F5 (v3,v4,v5)(2,3,4) F[4]
F6 (v2,v3,v5)(1,2,4) F[5]
Draw Methods
Geometric primitivesBegin-end structureVertex specifying order
ArrayDisplay List
Geometric primitives
GL_POINTS: Individual points GL_LINES: Vertices pairs, individual line segments GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES: Vertices triplets interpreted as triangles GL_TRIANGLE_STRIP GL_TRIANGLE_FAN GL_QUADS: Vertices quadruples, 4 sided polygons GL_QUAD_STRIP GL_POLYGON: Boundary of a simple, convex polygon
Begin-end structure
A Primitive is started by glBegin(GLenum mode);
And ended usingglEnd();
Between them you can specify the primitive coordinates, color, normal etc.
Vertex specifying order
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
GL_TRIANGLES
GL_QUAD_STRIP GL_QUADS
Example
glBegin(GL_QUADS); glNormal3f(-1, 0, 0); glVertex3d(0.0, 1.0, 0.0);
glVertex3d(0.0, 0.0, 0.0); glVertex3d(0.0, 0.0, -1.0); glVertex3d(0.0, 1.0, -1.0); glNormal3f(0, 1, 0); glVertex3d(0.0, 0.0, 0.0);
glVertex3d(1.0, 0.0, 0.0); glVertex3d(1.0, 0.0, -1.0); glVertex3d(0.0, 0.0, -1.0); glNormal3f(1, 0, 0);
glVertex3d(1.0, 0.0, 0.0); glVertex3d(1.0, 1.0, 0.0); glVertex3d(1.0, 1.0, -1.0); glVertex3d(1.0, 0.0, -1.0);
glEnd();
Display Lists
Create a display list: GLuint id; void init( void ){
id = glGenLists( 1 ); glNewList( id, GL_COMPILE ); … glEndList();
} Call a created list:
void display( void ){ glCallList( id );
}
Display Lists
Not all OpenGL routines can be stored in display lists
State changes persist, even after a display list is finished
Display lists can call other display listsDisplay lists are not editable, but you can
fake it make a list (A) which calls other lists (B, C, and D) delete and replace B, C, and D, as needed
Vertex Arrays
Enable the client states: glEnableClientState( GL_VERTEX_ARRAY )
Setup the pointers: Vertex array :glVertexPointers() Color array:glColorPointers() Normal array:glNormalPointers()
Draw with the arrays: glDrawArrays( GL_TRIANGLE_STRIP, 0, numVerts );
void glDrawElements(GLenum mode,GLsizei count,GLenum type,const GLvoid *indices);
glEnableClientState()
void glEnableClientState( GLenum array ); Parameters
array A symbolic constant for the array you want to enable or disable. This parameter can assume one
of the following values: GL_COLOR_ARRAY
If enabled, use color arrays with calls to glArrayElement, glDrawElements, or glDrawArrays. See also glColorPointer.
GL_EDGE_FLAG_ARRAY If enabled, use edge flag arrays with calls to glArrayElement, glDrawElements, or glDrawArrays. See also
glEdgeFlagPointer. GL_INDEX_ARRAY
If enabled, use index arrays with calls to glArrayElement, glDrawElements, or glDrawArrays. See also glIndexPointer.
GL_NORMAL_ARRAY If enabled, use normal arrays with calls to glArrayElement, glDrawElements, or glDrawArrays. See also
glNormalPointer. GL_TEXTURE_COORD_ARRAY
If enabled, use texture coordinate arrays with calls to glArrayElement, glDrawElements, or glDrawArrays. See also glTexCoordPointer.
GL_VERTEX_ARRAY If enabled, use vertex arrays with calls to glArrayElement, glDrawElements, or glDrawArrays. See also
glVertexPointer.
glVertexPointer()
The glVertexPointer function defines an array of vertex data. void glVertexPointer( GLint size, GLenum type, GLsizei stride,
GLsizei count, const GLvoid *pointer ); Parameters
size The number of coordinates per vertex. The value of size must be 2, 3, or 4.
type The data type of each coordinate in the array using the following symbolic
constants: GL_SHORT, GL_INT, GL_FLOAT, and GL_DOUBLE. stride
The byte offset between consecutive vertices. When stride is zero, the vertices are tightly packed in the array.
count The number of vertices, counting from the first, that are static.
pointer A pointer to the first coordinate of the first vertex in the array.
glColorPointer()
The glColorPointer function defines an array of colors. void glColorPointer( GLint size, GLenum type, GLsizei stride, GLsizei
count, const GLvoid * pointer ); Parameters
size The number of components per color. The value must be either 3 or 4.
type The data type of each color component in a color array. Acceptable data types are
specified with the following constants: GL_BYTE, GL_UNSIGNED_BYTE, GL_SHORT, GL_UNSIGNED_SHORT, GL_INT, GL_UNSIGNED_INT, GL_FLOAT, or GL_DOUBLE.
stride The byte offset between consecutive colors. When stride is zero, the colors are
tightly packed in the array. count
The number of static colors, counting from the first color. pointer
A pointer to the first component of the first color element in a color array.
glNormalPointer()
The glNormalPointer function defines an array of normals. void glNormalPointer( GLenum type, GLsizei stride, GLsizei
count, const GLvoid *pointer ); Parameters
type The data type of each coordinate in the array using the following
symbolic constants: GL_BYTE, GL_SHORT, GL_INT, GL_FLOAT, and GL_DOUBLE.
stride The byte offset between consecutive normals. When stride is zero, the
normals are tightly packed in the array. count
The number of normals, counting from the first, that are static. pointer
A pointer to the first normal in the array.
glDrawArrays()
The glDrawArrays function specifies multiple primitives to render.
void glDrawArrays( GLenum mode, GLint first, GLsizei count );
Parameters mode
The kind of primitives to render. The following constants specify acceptable types of primitives: GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_QUAD_STRIP, GL_QUADS, and GL_POLYGON.
first The starting index in the enabled arrays.
count The number of indexes to render.
glDrawElements
void glDrawElements( GLenum mode,GLsizei count, GLenum type, const GLvoid *indices );
Parameters mode
The kind of primitives to render. It can assume one of the following symbolic values: GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_QUAD_STRIP, GL_QUADS, and GL_POLYGON.
count The number of elements to be rendered.
type The type of the values in indices. Must be one of GL_UNSIGNED_BYTE, GL_
UNSIGNED_SHORT, or GL_UNSIGNED_INT. indices
A pointer to the location where the indices are stored.
Display Lists & Vertex Arrays
Better performance than immediate mode rendering
Display lists can be shared between multiple OpenGL context reduce memory usage for multi-context
applicationsVertex arrays may format data for better
memory access
Appearance
Color Vertex color: Specified on a per-vertex basis Face color: Specified on a per-primitive basis using
glColor3f(). Must enable color material for color tracking:
glEnable(GL_COLOR_MATERIAL);
Material: AMBIENT DIFFUSE SPECULAR SHININESS
Color format – RGBA
Color format – color index
Material Properties
Define the surface properties of a primitiveglMaterialfv(face, property, value );
separate materials for front and back
GL_DIFFUSE Base color
GL_SPECULAR Highlight Color
GL_AMBIENT Low-light Color
GL_EMISSION Glow Color
GL_SHININESS Surface Smoothness