OpenGL

wireanticipatedΛογισμικό & κατασκευή λογ/κού

14 Δεκ 2013 (πριν από 3 χρόνια και 3 μήνες)

73 εμφανίσεις

OpenGL

1

OpenGL

OpenGL is a software interface to graphics hardware.




Specifying Object Vertices



Every object is specified by vertices



glVertex3f (2.0, 4.1, 6.0);



glVertex2i (4, 5);




glVertex3fv (vector);



Current color affects any
vertices



glColor3f (0.0, 0.5, 1.0);



glColor4ub (0, 128, 255, 0);



glColor3dv (color);




Vertices are specified only between glBegin(
mode)

and glEnd(), usually in a
counter
-
clockwise order for polygons.

glBegin (GL_TRIANGLES);


glVertex2i (0, 0);


glVert
ex2i (2, 0);


glVertex2i (1, 1);

glEnd();


Primitive Types in glBegin



Points

GL_POINTS



L
ines


GL_LINES, GL_LINE_STRIP,
GL_LINE_LOOP



Triangles

GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN



Quads

GL_QUADS, GL_QUAD_STRIP



Polygons

GL_POLYGON


OpenGL: Modelview matrix



Transforms objects within the scene.


glMatrixMode(GL_MODELVIEW);



glLoadIdentity();


glTranslatef(10.5, 0, 0);


glRotatef(45, 0, 0, 1);


DrawCube();



Remember that the operations are right multiplied, so the
transformation just
before

DrawCube()
takes effect first
.


OpenGL: Projection Matrix

Sets up a perspective projection.



glFrustrum (...);



gluPerspective (fovy, aspect, near, far);

Application

3
-
D world

Simulation

User Interface

OpenGL

Graphics Hardware

(rasterizer, texturing,

lighting, transformations,

etc.)

Geometry, vertices,
normals, colors,
texture, etc.

OpenGL

2



glOrtho (...);




gluLookAt (...);





(often applied to modelview matrix)


E
xample
:

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

gluPerspective(64, (float)windowWidth /(float)windowHeight, 4, 4096);

gluLookAt(0.0, 0.0, 2.0, // camera position



0.0, 0.0, 0.0, // target position



0.0, 0.0, 2.0); // up vector



GLUT



OpenGL Utility Toolkit



GLUT is a library that handles system events and windowing across multiple platforms



Includes some nice utilities



We
strongly

suggest you use it



Find it at:


http://graphics.stanford.edu/courses/cs248
-
04/proj3/index.html



Example
:


int main (int argc, char *argv[])

{

glutInit(&argc, argv);


glutInitDisplayMode (GLUT_DEPTH | GLUT_DOUBLE |GLUT_RGBA);


glutInitWindowSize (windowWidth, window
Height);


glutInitWindowPosition (0, 0);


glutCreateWindow (“248 Video Game!");


SetStates();


// Initialize rendering states*


RegisterCallbacks(); // Set event callbacks*


glutMainLoop();


// Start GLUT


return 0;

}


Setting Up Rendering States



Ope
nGL is a
state

machine
: polygons are affected by the current color,
transformation, drawing mode, etc.



Enable and disable features such as lighting, texturing, and alpha blending.



glEnable (GL_LIGHTING);



glDisable (GL_FOG);


GLUT Event Callbacks



Register f
unctions that are called when certain events occur.



Examples
:


glutDisplayFunc( Display );


glutKeyboardFunc( Keyboard );


glutReshapeFunc( Reshape );


glutMouseFunc( Mouse );


glutPassiveMotionFunc( PassiveFunc );


glutMotionFunc( MouseDraggedFunc );



glutIdleFunc( Idle );


OpenGL Buffers



Multiple types of buffers



Color buffers (front/back, left/right)



Depth buffer (hidden surface removal)



Stencil buffer (allows masking or stenciling)



Accumulation buffer (antialiasing, depth of field)


OpenGL

3



Clearing buffe
rs:

// Clear to this color when screen is cleared.

glClearColor (0.0, 0.0, 0.0, 0.0);


// Clear color and depth buffers.

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


OpenGL Double Buffering



Double buffering:



Draw on
back
buffer while
front
buffer

is being displayed.



When finished drawing, swap the two, and begin work on the new back
buffer.



glutSwapBuffers();



Primary purpose: eliminate flicker


OpenGL: Normals and Lighting



OpenGL can do lighting computations for you



Normal vectors should be of u
nit length (normalized) in most cases.



Normal vector kept as state


each vertex is assigned the most recently set
normal vector



...



glNormal3fv (n0);



glVertex3fv (v0);



glVertex3fv (v1);



glVertex3fv (v2);



...


OpenGL: Lighting



glEnable (GL_LI
GHTING);



OpenGL supports a minimum of 8 lights.

glEnable (GL_LIGHT0); ... glEnable (GL_LIGHT7);



Lights have a position, type, and color, among other things (more details in
text).



Types of lights are point light, directional light, and spotlight.


OpenG
L: Shading

OpenGL supports 2 basic shading models: flat and smooth.


glShadeModel(GL_FLAT);



glShadeModel(GL_SMOOTH
);






OpenGL: Material Properties



Material properties are associated with each polygon (corresponding light
p
roperties)



glMaterial*(GLenum face, GLenum pname, TYPE param);



Some properties (pname),



GL_AMBIENT: Ambient color of material



GL_DIFFUSE: Diffuse color of material



GL_SPECULAR: Specular component (for highlights)



GL_SHININESS: Specular exponent (intensity
of highlight)