Today … The rendering pipeline in detail What is OpenGL First OpenGL program Details about modeling.
OpenGL A Brief Overview. What is OpenGL? It is NOT a programming language. It is a Graphics...
-
Upload
shanon-marsh -
Category
Documents
-
view
223 -
download
0
Transcript of OpenGL A Brief Overview. What is OpenGL? It is NOT a programming language. It is a Graphics...
OpenGLA Brief Overview
What is OpenGL? It is NOT a programming language. It is a Graphics Rendering API consisting of
a set of function with a well defined interface.
Whenever we say that a program is OpenGL-based or OpenGL applications, we mean that it is written in some programming language (such as C/C++ or Java) that makes calls to one or more of OpenGL libraries.
2
Useful Websites and Books Official Site
http://www.opengl.org Non official sites
http://nehe.gamedev.net/http://google.com/
BOOKS OpenGL Red Book & OpenGL Blue Book
3
Three Views of OpenGL Programmer’s view
Specify a set of objects to render Describe the properties of these objects Define how these objects should be viewed
State machine States determine how the inputs are processed. Change a state (such as color) by using state
changing functions OpenGL uses Rendering Pipeline Model
Models -> Transformer -> Clipper -> Projector -> Rasterizer -> Image
4
OpenGL API Functions OpenGL contains over 200 functions
Primitive functions: define the elements (e.g. points, lines, polygons, etc.)
Attribute functions: control the appearance of primitives (e.g. colors, line types, light source, textures, etc.)
Viewing functions: determine the properties of camera. Handle transformations.
Windowing functions: not part of core OpenGL Other functions
5
Libraries and HeadersLibrary Name Library File Header File Note
OpenGL opengl32.lib (Win)
-lgl (UNIX)
gl.h “core” library
Auxiliary library
glu32.lib (Win)
-lglu (UNIX)
glu.h handles a variety of accessory functions
Utility toolkit glut32.lib (Win)
-lglut (UNIX)
glut.h
glaux.h
window management & others
6
Function Naming Conventions
glColor3f(…) library name, command name, # of arguments, argument type
gl: OpenGL
glu: GLU
glut: GLUT
f: the argument is float type
i: the argument is integer type
v: the argument requires a vector
7
A Sample Programvoid main (int argc, char **argv)
{
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (500, 500);
glutCreateWindow (“My First Program");
myinit ();
glutDisplayFunc ( display );
glutReshapeFunc ( resize );
glutKeyboardFunc ( key );
glutMainLoop ();
}
2
3
4
1
8
1. Initialize & Create Window
void main (int argc, char **argv)
{
glutInit (&argc, argv); // GLUT initialization
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // display model
glutInitWindowSize (500, 500); // set window size
glutCreateWindow (“My First Program"); // create window
……
}
9
2. Initialize OpenGL State
void myinit(void)
{
glClearColor(1.0, 1.0, 1.0, 1.0); // background color
glColor3f(1.0, 0.0, 0.0); // line color
glMatrixMode(GL_PROJECTION); // set up viewing:
glLoadIdentity(); // load identity matrix
gluOrtho2D(0.0, 500.0, 0.0, 500.0); // specify Orthographic view
glMatrixMode(GL_MODELVIEW); // go back to MV matrix
}
10
3. Register Callback Functions
void main (int argc, char **argv)
{
……
glutDisplayFunc ( display ); // display callback
glutReshapeFunc ( resize ); // window resize callback
glutKeyboardFunc ( key ); // keyboard callback
……
}
11
(side note) GLUT Callback Functions• Contents of window need to be refreshed
glutDisplayFunc() • Window is resized or moved
glutReshapeFunc()• Key action
glutKeyboardFunc()• Mouse button action
glutMouseFunc()• Mouse moves while a button is pressed
glutMotionFunc()• Mouse moves regardless of mouse button state glutPassiveMouseFunc()• Called when nothing else is going on
glutIdleFunc()
12
3.1 Rendering Callback
void display( void )
{
int k;
glClear(GL_COLOR_BUFFER_BIT);
for( k=0; k<5000; k++)
……
}
13
3.2 Window Resize Callback
void resize(int w, int h)
{
……
display();
}
14
3.3 Keyboard Input Callback
void key( char mkey, int x, int y ){ switch( mkey ) { case ‘q’ : exit( EXIT_SUCCESS ); break; …… }}
15
4. Event Process Loop This is where your application receives
events, and schedules when callback functions are called
void main (int argc, char **argv)
{
……
glutMainLoop();
}
16
2D Geometric Primitives Primitives – fundamental entities such
as point and polygons Basic types of geometric primitives
Points Line segments Polygons
17
GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP
GL_POLYGON GL_QUADS GL_TRIANGLES GL_TRIANGLE_FAN
All geometric primitives are specified by vertices
2D Geometric Primitives
18
glBegin( type ); glVertex*(…); …… glVertex*(…);glEnd();
type determines how vertices are combined
Specifying Geometric Primitives
19
Example
void drawSquare (GLfloat *color)
{
glColor3fv( color ); // sets the color of the square
glBegin(GL_POLYGON);
glVertex2f ( 0.0, 0.0 );
glVertex2f ( 1.0, 0.0 );
glVertex2f ( 1.1, 1.1 );
glVertex2f ( 0.0, 1.0 );
glEnd();
glFlush() // force the renderer to output the results
}
20
21
2D Viewing• Where do we draw the 2D object?
– Assume that we draw objects on an infinite sheet of paper
– Then we need to specify clipping region and project these 2D objects to the screen
void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
22
Coordinate Systems and Transformation• Identify which matrix we wish to alter• Set the matrix to an identity matrix• Alter the matrix to form the desired matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
23
Coordinate Systems and TransformationglMatrixMode(GLenum mode);
– Identify which matrix we wish to alter – The mode is usually GL_MODELVIEW, GL_PROJECTION
glLoadIdentity();– Set the current matrix to an identity matrix
24
Enabling GL Features• Features – lighting, hidden-surface
removal, texture mapping, etc…• Each feature will slow down the
rendering process.• We can enable/disable each feature
individuallyvoid glEnable(GLenum feature)
void glDisable(GLenum feature)
E.g. glEnable(GL_LIGHTING);
25
Enabling GL FeaturesGL_ALPHA_TEST
If enabled, do alpha testing. GL_AUTO_NORMAL
If enabled, generate normal vectors when either GL_MAP2_VERTEX_3 or GL_MAP2_VERTEX_4 is used to generate vertices. See glMap2.
GL_BLEND If enabled, blend the incoming RGBA color values with the values in the color buffers..
GL_CLIP_PLANE i If enabled, clip geometry against user-defined clipping plane i..
GL_COLOR_LOGIC_OP If enabled, apply the currently selected logical operation to the incoming RGBA color and color buffer values.
GL_COLOR_MATERIAL If enabled, have one or more material parameters track the current color.
GL_COLOR_TABLE If enabled, preform a color table lookup on the incoming RGBA color values.
GL_CONVOLUTION_1D If enabled, perform a 1D convolution operation on incoming RGBA color values.
GL_CONVOLUTION_2D If enabled, perform a 2D convolution operation on incoming RGBA color values.
……
26
Saving the State• State changing functions – overwrites the
state variables• We can store previous state values for later
use– Matrix stacks
void glPushMatrix()void glPopMatrix()
– Attribute stacksvoid glPishAttrib(GLbitfield mask)void glPopAttrib()
27
Saving the StateglMatrix(GL_PROJECTION)// set projection matrix// draw sceneglPushMatrix();// change the project matrix//draw sceneglPopMatrix();
28
Double Buffering• Use two buffers: front buffer and back buffer
to guarantee the displaying of a fully redrawn butter image
glutSwapBuffers();– Replace glFlush() by glutSwapBuffer() in
the display callback if using double buffering
29
Transformations and Camera Analogy• Modeling transformation
– Positioning and moving the model.• Viewing transformation
– Positioning and aiming camera in the world.• Projection transformation
– Adjusting the lens of the camera.• Viewport transformation
– Enlarging or reducing the physical photograph.
30
Transformations in OpenGL
• Transformations are specified by matrix operations. Desired transformation can be obtained by a sequence of simple transformations that can be concatenated together.
• Transformation matrix is usually represented by 4x4 matrix (homogeneous coordinates).
• Provides matrix stacks for each type of supported matrix to store matrices.
31
Specifying Operations (1)• Translation
glTranslate {fd} (TYPE x, TYPE y, TYPE z)
Multiplies the current matrix by a matrix that translates an object by the given x, y, z.
32
Specifying Operations (2)• Scaling
glScale {fd} (TYPE x, TYPE y, TYPE z) Multiplies the current matrix by a
matrix that scales an object by the given x, y, z.
33
Specifying Operations (3)• Rotation
glRotate {fd} (TYPE angle, TYPE x, TYPE y,
TYPE z) Multiplies the current matrix by a matrix
that rotates an object in a counterclockwise direction about the ray from origin through the point by the given x, y, z. The angle parameter specifies the angle of rotation in degrees.
34
Order of Transformations
• The transformation matrices appear in reverse order to that in which the transformations are applied.
• In OpenGL, the transformation specified most recently is the one applied first.
35
Viewing-Modeling Transformation
• If given an object, and we want to render it from a viewpoint, what information do we have to have?
– Viewing position– Which way I am looking at– Which way is “up”…..
36
Default Viewing
+X
+Z
+YBy default, the camera is at the origin, looking down the negative z-axis
37
Where are we and what are we looking at?
x
y
z
x
y
zEyepoint
(eyex, eyey, eyez)
Model
View-up vector
(upx, upy, upz)
Loot at
(atx, aty, atz)
38
Viewing in OpenGL• Look-At Function
gluLookAt (eyex, eyey, eyez, atx, aty, atz, upx, upy, upz )
Defines a viewing matrix and multiplies the current matrix by it. Alters the ModelView matrix.
39
Projection Transformation
• Projection & Viewing Volume• Projection Transformation• Viewpoint Transformation
40
Perspective Projection Volume
Far-plane: zFarNear-plane: zNear
Viewing volume
hw
aspect ratio = w/hy
z
x
fovy
41
Perspective Projection CommandsglFrustum( left, right, bottom, top, zNear, zFar
)
Creates a matrix for a perspective viewing frustum and multiplies the current matrix by it. Alters the Projection matrix.
42
gluPerspective( fovy, aspect, zNear, zFar )
Alternative to glFrustum(..). Creates a matrix for an perspective viewing frustum and multiplies the current matrix by it. Alters the Projection matrix.
Note: fovy is the field of view (fov) angle between the top and bottom planes of the clipping volume. aspect is the aspect ratio
Perspective Projection Commands
43
Viewport• Viewport
– The region within the window that will be used for drawing the clipping area
– By default, it is set to the entire rectangle of the window that is opened
– Measured in the window coordinates, which reflect the position of pixels on the screen related to the lower-left corner of the window
44
Viewport Transformation
A viewpoint is defined as the same size as the window
A viewpoint is defined as half the size of the window
h
w h
w
45
Viewport Commands
• glViewport( x, y, width, height )
Defines an area of the window into which the final image is mapped
(x, y) specifies the lower-left corner of the viewport
(width, height) specifies the size of the viewport rectangle
Advanced Topics Lighting Texture Mapping Plotting Implicit Functions Shadows Fog Picking (object selection) GUI (glut pop-up menus, glui library)
46
Reference links given on slide 3