basic opengl glenn g. chappell [email protected] u. of alaska fairbanks cs 381 lecture notes...
TRANSCRIPT
![Page 1: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/1.jpg)
Basic OpenGL
Glenn G. [email protected]
U. of Alaska Fairbanks
CS 381 Lecture NotesWednesday, September 10, 2003
![Page 2: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/2.jpg)
10 Sep 2003 CS 381 2
Review:Linear Interpolation [1/2] Approximating a quantity between places where the quantity is
known, is called interpolation. The simplest interpolation method is linear interpolation (lirping).
Linear interpolation makes the (usually false!) assumption that the graph of the quantity between the two known values is a straight line.
When we lirp, we are given two values of a quantity; we determine its value somewhere between these.
The simple case: When t = 0, the quantity is equal to a. When t = 1, the quantity is equal to b. Given a value of t between 0 and 1, the interpolated value of the
quantity is
.1 btat
![Page 3: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/3.jpg)
10 Sep 2003 CS 381 3
Review:Linear Interpolation [2/2] What if we are not given values of the quantity
at 0 and 1? Say the value at s1 is a and the value at s2 is b, and we
want to find the interpolated value at s. We set
and proceed as before:
Lastly, when we want to lirp quantities with several coordinates (like points or colors), lirp each coordinate separately.
,12
1
ss
sst
.1ed_valueinterpolat btat
![Page 4: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/4.jpg)
10 Sep 2003 CS 381 4
Review:Introduction to OpenGL [1/2]
Professional-quality 2-D & 3-D graphics API Developed by Silicon Graphics Inc. in 1992. Based on Iris GL, the SGI graphics library.
Available in a number of languages. OS-independent and hardware-independent. Aimed at 2-D/3-D scenes made of polygons (and
lines and points). Not as good for 2-D windows/text/GUI-style graphics.
![Page 5: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/5.jpg)
10 Sep 2003 CS 381 5
Review:Introduction to OpenGL [2/2] OpenGL Itself
The interface with the graphics hardware. Designed for efficient implementation in hardware. Particular
OpenGL implementations may be partially or totally software. C/C++ header: <GL/gl.h>.
The OpenGL Utilities (GLU) Additional functions & types for various graphics operations. Designed to be implemented in software; calls GL. C/C++ header: <GL/glu.h>.
OpenGL Extensions Functionality that anyone can add to OpenGL. OpenGL specifies rules that extensions are to follow. May be system-dependent. We will not use any extensions.
![Page 6: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/6.jpg)
10 Sep 2003 CS 381 6
Basic OpenGL:Overview
We now discuss how to use OpenGL to produce 3-D graphics. We will cover: The design of OpenGL.
• Design philosophy and conventions. OpenGL primitives.
• The basic things that OpenGL can draw.
Tomorrow we will look the workings of an actual OpenGL/GLUT program.
![Page 7: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/7.jpg)
10 Sep 2003 CS 381 7
The Design of OpenGL:Introduction
OpenGL is an API for rendering raster images of 2-D/3-D scenes. So OpenGL’s work ends when the completed image (or
frame, in an animation context) is in the frame buffer. We deal with OpenGL via function calls (or
commands). No global variables. Most OpenGL functions have few parameters. But you make lots of function calls. No complex data types. OpenGL is function-call intensive.
• Think: advantages/disadvantages.
![Page 8: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/8.jpg)
10 Sep 2003 CS 381 8
The Design of OpenGL:Example Code To draw a red triangle with vertices (0,0), (1,0), (1,1):
glColor3d(0.9, 0.1, 0.1); // red (setting an attribute)
glBegin(GL_TRIANGLES); // starting a primitive
glVertex2d(0., 0.); // vertex data
glVertex2d(1., 0.);
glVertex2d(1., 1.);
glEnd(); // ending the primitive
![Page 9: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/9.jpg)
10 Sep 2003 CS 381 9
The Design of OpenGL :Naming Conventions [1/2]
OpenGL (C API) Functions
• Begin with “gl”, words capitalized & run together• Example: glClearColor• Can include type information. For example, the “2d” in
“glVertex2d” indicates two parameters of type GLdouble. Constants
• Begin with “GL”, all upper-case, “_” between words• Example: GL_TRIANGLE_STRIP
Types• Begin with “GL”, next word not capitalized, all words run
together• Example: GLdouble
![Page 10: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/10.jpg)
10 Sep 2003 CS 381 10
The Design of OpenGL : Naming Conventions [2/2]
Related packages use similar conventions. GLU
• Function: gluScaleImage• Constant: GLU_TESS_ERROR• Type: GLUtesselatorObj
GLUT (to be discussed on Friday)• Function: glutInitDisplayMode• Constant: GLUT_MIDDLE_BUTTON
![Page 11: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/11.jpg)
10 Sep 2003 CS 381 11
The Design of OpenGL:Types [1/2]
OpenGL defines its own types, which have the same (minimum) precision on all systems. Some of these: GLint: at least 32-bit integer GLfloat: at least 32-bit floating-point GLdouble: at least 64-bit floating-point and others …
So, for example, GLdouble is probably the same as double, but may not be. Converting (say) a GLdouble to a double is fine. But be careful when tossing around GLdouble * and double *. (Why?)
![Page 12: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/12.jpg)
10 Sep 2003 CS 381 12
The Design of OpenGL:Types [2/2]
Some OpenGL commands have several forms allowing for different types. For example, glVertex* can take 2, 3, or 4 parameters
of many different types.• Function glVertex2d takes 2 parameters of type GLdouble.
• Function glVertex3f takes 3 parameters of type GLfloat.• Function glVertex3fv (“v” for “vector”) takes a single
parameter of type GLfloat * (should be a pointer to an array of 3 GLfloat’s).
The command glTranslate* always takes three parameters, but they may vary in type.
• Function glTranslated takes 3 GLdouble’s.• Function glTranslatef takes 3 GLfloat’s.
![Page 13: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/13.jpg)
10 Sep 2003 CS 381 13
The Design of OpenGL:Attributes & Primitives OpenGL functions as a state machine. There are three kinds of functions:
Those that set state. Those that return state. Those that draw.
Drawing is done via primitives. States are used to set attributes of those
primitives. So: all drawn objects are composed of primitives.
The properties of these are attributes, which are determined by OpenGL states. (Recall the red triangle example.)
![Page 14: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/14.jpg)
10 Sep 2003 CS 381 14
OpenGL Primitives:Overview [1/2] All rendering operations are composed of primitives.
These need to be useful to the programmer and doable efficiently by the library & hardware.
We will now look at those OpenGL primitives that are handled via the glBegin-glEnd mechanism. There are ten of these; they consist of ways to draw: Points. Polylines. Filled polygons.
Other primitive rendering operations are handled differently in OpenGL. Specifically, those involving screen-aligned rectangles:
pixmaps, bitmaps, and screen-aligned rectangular polygons. Recall: OpenGL has no circle/ellipse/curve primitives.
![Page 15: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/15.jpg)
10 Sep 2003 CS 381 15
OpenGL Primitives:Overview [2/2] The ten glBegin-style OpenGL Primitives
Points (1 primitive)• GL_POINTS
Polylines (3 primitives)• GL_LINES• GL_LINE_STRIP• GL_LINE_LOOP
Filled Polygons (6 primitives)• Triangles
• GL_TRIANGLES• GL_TRIANGLE_STRIP• GL_TRIANGLE_FAN
• Quadrilaterals• GL_QUADS• GL_QUAD_STRIP
• General Polygons• GL_POLYGON
![Page 16: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/16.jpg)
10 Sep 2003 CS 381 16
A primitive is given a number of vertices (specified with glVertex…). Now we look at what the primitives do with the vertices they are given. Numbers indicate vertex ordering. Blue objects mark what is actually rendered.
Points GL_POINTS
OpenGL Primitives:Points
1
524
36
![Page 17: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/17.jpg)
10 Sep 2003 CS 381 17
Polylines GL_LINES
GL_LINE_STRIP
GL_LINE_LOOP
OpenGL Primitives:Polylines
1
524
36
6
6
1
524
3
1
524
3
![Page 18: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/18.jpg)
10 Sep 2003 CS 381 18
Polygons: Triangles GL_TRIANGLES
• Clockwise orcounterclockwisedoes not matter (yet).
GL_TRIANGLE_STRIP
GL_TRIANGLE_FAN
OpenGL Primitives:Polygons — Triangles
1
5
2 4
3
6
6
1
5
2
43
1
5
2 4
3
6
![Page 19: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/19.jpg)
10 Sep 2003 CS 381 19
Polygons: Quadrilaterals GL_QUADS
• Clockwise orcounterclockwisedoes not matter (yet).
GL_QUAD_STRIP• Note differences in
vertex ordering!
Polygons: General GL_POLYGON
OpenGL Primitives:Polygons — Quad’s, General
1
5
2 3
4
7
6
1
5
2
43
2
8
6
1
5
4
3
8
7
6
![Page 20: Basic OpenGL Glenn G. Chappell CHAPPELLG@member.ams.org U. of Alaska Fairbanks CS 381 Lecture Notes Wednesday, September 10, 2003](https://reader036.vdocuments.site/reader036/viewer/2022082505/56649e505503460f94b477b6/html5/thumbnails/20.jpg)
10 Sep 2003 CS 381 20
OpenGL Primitives:Restrictions
When drawing points, lines, and triangles, vertices can be in any positions you like.
Individual quadrilaterals and general polygons must be: Planar (this is easy in 2-D). Simple (no crossings, holes). Convex (bulging outward; no concavities).
Know the ten primitives! Know the associated vertex orderings!