Upload
daphne-ayers
View
69
Download
3
Embed Size (px)
DESCRIPTION
State Management and Drawing Geometry Objects (OpenGL Book Ch 2). Objective. Clear the window to an arbitrary color Force any pending drawing to complete Draw with any geometric primitive Turn states on and off and query state variables Control the display of those primitives - PowerPoint PPT Presentation
Citation preview
State Management and Drawing Geometry Objects
(OpenGL Book Ch 2)
Objective
• Clear the window to an arbitrary color
• Force any pending drawing to complete
• Draw with any geometric primitive
• Turn states on and off and query state variables
• Control the display of those primitives
• Specify normal vectors
• Use vertex arrays
• Save and restore state variables
Clearing the Window
glClearColor(0.0, 0.0, 0.0, 0.0);
glClearDepth(1.0);
glClear(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);
// or run more slowly with,
// glClear(GL_COLOR_BUFFER_BIT);
// glClear(GL_DEPTH_BUFFER_BIT);
Specifying a Color
• Pseudocodeset_current_color(red);
draw_object(A);
draw_object(B);
set_current_color(green); // wasted
set_current_color(blue);
draw_object(C);
• glColor3f(1.0, 0.0, 0.0);
Forcing Completion of Drawing
• glFlush();– Forces previously issued OpenGL commands to b
egin execution.
• glFinish();– Forces all previously issued OpenGL command s t
o complete. This command doesn’t return until all effects from previous commands are fully realized.
What are Points, Lines, and Polygon?
• Points– represented by a vertex
• Lines– refer to line segments
• Polygons– must be simple, convex, and planar
• Rectangles– glRectf(x1, y1, x2, y2);– glRectfv(*pt1, *pt2);
Curves and Curved Surface
Approximating Curves
Specifying Vertices
glVertex2s(2, 3);
glVertex3d(0.0, 0.0, 3.14);
glVertex4f(2.4, 1.0, -2.2, 2.0);
GLdouble v[3] = {1.0, 9.0, 8.0};
glVertex3dv(v);
Drawing Geometric Primitives
glBegin(GL_POLYGON);
glVertex2f(0.0, 0.0);
glVertex2f(4.0, 3.0);
glVertex2f(6.0, 1.5);
glVertex2f(4.0, 0.0);
glEnd();
OpenGL Geometric Primitives
• GL_POINTS• GL_LINES• GL_LINE_STRIP• GL_LINE_LOOP• GL_TRIANGLES• GL_TRIANGLE_STRIP• GL_TRIANGLE_FAN• GL_QUADS• GL_QUAD_STRIP• GL_POLYGON
Geometric Primitive Types
Valid Commands between glBegin(), glEnd()
• glVertex*()• glColor*(), glIndex*()• glNormal*()• glTexCoord*()• glEdgeFlag*()• glMaterial*()• glArrayElement()• glEvalCoord*(), glEvalPoint*()• glCallList(), glCallLists()• and any C or C++ codes
Basic State Management
• glEnable(GL_DEPTH_TEST);• glDisable(GL_FOG)• if (glIsEnabled(GL_FOG)) ...• glGetBooleanv();• glGetIntegerv();• glGetFloatv();• glGetDoublev(GL_CURRENT_COLOR,x);• glGetPointerv();
Point and Line Details
glPointSize(2.0);
glLineWidth(2.0);
glLineStipple(1,0xAAAA);
glLineStipple(2,0xAAAA);
glEnable(GL_LINE_STIPPLE);
Stippled Lines
Polygon Details
• Drawing polygons as points, outlines, or solids
glPolygonMode(GL_FRONT, GL_FILL);
glPolygonMode(GL_BACK, GL_LINE);
glPolygonMode(GL_FRONT_AND_BACK, G
L_POINT);
Reversing and Culling Polygon Faces
glFrontFace(GL_CCW);
glFrontFace(GL_CW);
glCullFace(GL_BACK);
glCullFace(GL_FRONT);
glCullFace(GL_FRONT_AND_BACK);
Stippling Polygons
glEnable(GL_POLYGON_STIPPLE);
// Define stipple pattern fly here...
glPolygonStipple(fly);
Marking Polygon Boundary Edges
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_POLYGON);
glEdgeFlag(GL_TRUE);
glVertex3fv(V0);
glEdgeFlag(GL_FALSE);
glVertex3fv(V1);
glEdgeFlag(GL_TRUE);
glVertex3fv(V2);
glEnd();
Normal Vectors
glBegin (GL_POLYGON);
glNormal3fv(n0);
glVertex3fv(v0);
glNormal3fv(n1);
glVertex3fv(v1); glVertex3fv(v2);
glEnd();
• Provide Unit Normals! glEnable(GL_NORMALIZE) can be expensive
Example: Drawing a unit cubeStatic GLfloat vdata[8][3] = {{0.0,0.0,0.0},{1.0,0.0,0.0},{1.0,1.0,0.0},{0.0,1.0,0.0},{0.0,0.0,1.0},{1.0,0.0,1.0},{1.0,1.0,1.0},{0.0,1.0,1.0}}; //global!!Static GLint allIndx[6][4]= { {4,5,6,7},{1,2,6,5},{0,1,5,4}, {0,3,2,1},{0,4,5,4},{2,3,7,6}};for (i=0; i<6; i++){
glBegin(GL_QUADS);glVertex3fv(&vdata[allIndx[i][0]][0]);glVertex3fv(&vdata[allIndx[i][1]][0]);glVertex3fv(&vdata[allIndx[i][2]][0]);glVertex3fv(&vdata[allIndx[i][3]][0]);
glEnd();}
0
7
3 2
1
5
6
4
X
Y
Z
Vertex Arrays
• To reduce the number of function calls
– Six sides; eight shared vertices
Step 1: Enabling arrays
Step 2: Specifying data for the arrays
Step 3: Dereferencing and rendering
Step 1: Enabling Arrays
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_INDEX_ARRAY);
glEnableClientState(GL_EDGE_FLAG_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
Step 2: Specifying Data for the Arrays
• glVertexPointer(size, type, stride, pointer)
• glColorPointer(size, type, stride, pointer)
• glIndexPointer(type, stride, pointer)
• glNormalPointer(type, stride, pointer)
• glTexCoordPointer(size, type, stride, pointer)
• glEdgeFlagPointer(stride, pointer)
Step 2: Specifying Data for the Arrays
• glVertexPointer(size, type, stride, ptr)
static GLfloat v[] = {
0.0,0.0,0.0, 1.0,0.0,0.0, 1.0,1.0,0.0, 0.0,1.0,0.0, 0.0,0.0,1.0, 1.0,0.0,1.0, 1.0,1.0,1.0), 0.0,1.0,1.0 };
glVertexPointer(3, GL_FLOAT, 0, v);
Stride
static GLfloat intertwined [ ] = {
1.0, 0.2, 1.0, 100.0, 100.0, 0.0,
/* ………………………………*/
0.2, 0.2, 1.0, 200.0, 100.0, 0.0 };
glColorPointer(3, GL_FLOAT, 6*sizeof(GLfloat), intertwined);
glVertexPointer(3, GL_FLOAT, 6*sizeof(GLfloat), &intertwined[3]);
Step 3: Dereferencing and Rendering
Alternative 1:dereferencing a single array element
glVertexPointer(3, GL_FLOAT, 0, v);glBegin(GL_QUADS);
glArrayElement(4);glArrayElement(5);glArrayElement(6);glArrayElement(7);…
glEnd();
0
7
3 2
1
5
6
4
X
Y
Z
Dereferencing a List of Array Elements
glVertexPointer(3, GL_FLOAT, 0, v);Static GLint allIndx[24]={4,5,6,7, 1,2,6,5, 0,1,5,4,
0,3,2,1, 0,4,5,4, 2,3,7,6};
Alternative 2:glBegin(GL_QUADS); for(int i = 0; i < 24; i++)
glArrayElement(allIndx[i]);glEnd();
Alternative 3: Better still …glDrawElements(GL_QUADS,24,GL_UNSIGNED_INT,allIndx);
Hints for Building Polygonal Models of Surfaces
• Keep polygon orientations consistent.– all clockwise or all counterclockwise
• Watch out for non-triangular polygons.
• Trade-off between speed and quality.
• Avoid T- intersections
• There are more… Read the book.
Next …
Vectors, Matrices and Homogeneous coordinate system
Transformations