18
Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Embed Size (px)

Citation preview

Page 1: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Drawing Basic Graphics Primitives

Lecture 4Wed, Sep 3, 2003

Page 2: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

OpenGL Functions

OpenGL function names always begin with gl, glu, or glut, depending on the library.Names of functions that allow a variable number of arguments are followed by a digit indicating the number.Names of functions that allow various argument types are followed by a letter indicating the type.

Page 3: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

State Variables

OpenGL maintains a large number of state variables.These state variables are global – they are in effect and accessible within all functions.Some states are Colors used in various situations. Shading effects. Lighting effects.

Page 4: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Setting the Color

One of the states maintained is the current color used for drawing.The color is a combination of red, green, and blue.Use glColor*() to set the current color. glColor3f(1.0, 0.0, 0.0) – bright red. glColor3f(1.0, 1.0, 0.0) – bright yellow. glColor3f(0.5, 0.5, 0.5) – medium gray.

Page 5: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Drawing Dots

To color a single pixel, use the glVertex*() function. glVertex2i(int, int). glVertex3f(float, float, float), etc.

The pixel is colored with the current color, as set by glColor().The coordinates are in “world” coordinates, not screen coordinates.

Page 6: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Primitive Objects

The pixel-drawing function is called glVertex() because the pixel is typically a vertex in a polygon.The programmer must indicate to the GPU whether the point is an isolated point or part of a line or polygon.To do this, use glBegin() and glEnd() to enclose the vertices of the primitive objects.

Page 7: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Primitive Objects

glBegin(type) defines the type of object to be drawn.Some values of type are GL_POINTS GL_LINES GL_TRIANGLES GL_POLYGON

glEnd() marks the end of the object.

Page 8: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Creating Points

The following program segment will draw three pixels.

glBegin(GL_POINTS); glVertex2i(10, 20); glVertex2i(50, 20); glVertex2i(50, 50);glEnd():

Page 9: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Creating Triangles

The following program segment will draw and fill a triangle.

glBegin(GL_TRIANGLES); glVertex2i(10, 20); glVertex2i(50, 20); glVertex2i(50, 50);glEnd():

Page 10: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Creating Triangles

The following program segment will draw, but not fill, a triangle.

glBegin(GL_LINE_LOOP); glVertex2i(10, 20); glVertex2i(50, 20); glVertex2i(50, 50);glEnd():

Page 11: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Drawing Primitives

For points, the size of the drawing pen is set by the function glPointSize(size).For lines, the pen width is defined by the function glLineWidth(width).The size and width are measured in pixels.

Page 12: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Example: DrawDots

DrawDots.cpp Why does each dot disappear when

the next dot is drawn? How could we modify the program so

that all the dots remained? Do not clear the buffer, but keep adding

to it? Store all the points in a list and draw

each one every time? What happens when the window is

resized?

Page 13: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Making Line Drawings

Drawing lines is similar to drawing points and triangles.Use glBegin(GL_LINES);Every pair of points drawn between glBegin() and glEnd() is rendered as a line.We may list many pairs of points.

Page 14: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Example: Draw an X

The following program segment will draw two line segments that form an X.

glBegin(GL_LINES); glVertex2i(50, 50); glVertex2i(100, 100); glVertex2i(50, 100); glVertex2i(100, 50);glEnd();

Page 15: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Example: Draw an X

DrawX.cpp

Page 16: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Drawing Polygons

If we use GL_POLYGON in the glBegin() function, then the entire list of points is used to draw a single polygon.What would the last example look like?Why not use GL_POLYGON to draw several polygons in one group, just as with GL_LINES?

Page 17: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Example: Draw an Octagon

The following program segment will draw a regular octagon.int cx = 100, cy = 100;glBegin(GL_POLYGON); for (int i = 0; i < 8; i++) { float dx = cos(i*PI/4); float dy = sin(i*PI/4); glVertex2i(x + 100*dx, y + 100*dy); }glEnd();

Page 18: Drawing Basic Graphics Primitives Lecture 4 Wed, Sep 3, 2003

Example: Draw an Octagon

DrawOctagon.cpp