NeHe Tutorial 03: ColorJune 1st, 2010 Patrick Stein

Introduction

In the previous tutorial, we drew a plain triangle and quadrilateral on the screen. The next NeHe tutorial colors this triangle and quadrilateral.

;;; *.lisp
#<:use "simple-tutorial.lisp">

;;; window title
"tut03: color"

In the base display code, we already cleared the color buffer and the depth buffer and reset the modelview matrix. Now, we’re going to translate the modelview matrix so that when we draw our triangle, it is going to be in front of our viewpoint and off to our left. Then, we’ll draw the triangle, translate over toward the right, and draw the quadrilateral.

;;; display extra code
(gl:translate -1.5 0.0 -6.0)    ; translate left and into the screen
#<:use "draw triangle">
(gl:translate 3.0 0.0 0.0)      ; translate right

The above is untouched from the previous tutorial.

Drawing with vertex coloring

Now that we’ve moved over to the side a little bit and back a ways, we’re going to draw a triangle. We open with the `with-primitives` call and then specify the vertexes.

;;; draw triangle
(gl:with-primitives :triangles  ; start drawing triangles
#<:use "draw triangle vertexes">
)

Before, we simply listed the vertexes. Here, we are going to specify a color before each vertex.

;;; draw triangle vertexes
(gl:color 1.0 0.0 0.0)        ; set the color to red
(gl:vertex 0.0 1.0 0.0)       ; top vertex

The arguments to `color` are the red, green, and blue values (respectively). The values range from zero (for the darkest) to one (for the brightest). I have omitted here the optional fourth argument for the alpha channel. It defaults to `1.0`.

It is important to note that we have set the global color to red. This vertex will be red because the global color was red at the time we created the vertex. If we failed to ever set the color again, everything would be red.

Here, however, we’re going to make the next vertex green.

;;; draw triangle vertexes (cont.)
(gl:color 0.0 1.0 0.0)        ; set the color to green
(gl:vertex -1.0 -1.0 0.0)     ; bottom-left vertex

We are going to make the final vertex blue for this triangle.

;;; draw triangle vertexes (cont.)
(gl:color 0.0 0.0 1.0)        ; set the color to blue
(gl:vertex 1.0 -1.0 0.0)      ; bottom-right vertex

Note: the global color is now blue. We could leave it blue and it would be blue until we set it to some other color.

Drawing with flat coloring

Drawing quadrilaterals is much like drawing triangles. Here, of course, we need four vertexes. In this case, however, we’re going to color the whole quadrilateral the same color. So, we are just going to set the global color to a light blue and then draw the quadrilateral exactly as we did in the previous tutorial.