|
glMatrixMode ( GL_PROJECTION ); glLoadIdentity(); gluOrtho2D( 0.0, 2.0, 0.0, 1.0 ); //set world window glViewport( 40, 60, 300, 200 ); //set viewport
|
|
|||||||||||||||||||||||||
|
glBegin ( GL_POLYGON );
glVertex2f(0.0, 0.0);
glVertex2f(0.0, 3.0);
glVertex2f(4.0, 3.0);
glVertex2f(6.0, 3.0);
glVertex2f(4.0, 3.0);
glEnd();
| Value | Meaning | |
|---|---|---|
| GL_POINTS | Individual points | |
| GL_LINES | independent line segments, each joining two vertices | |
| GL_LINE_STRIP | series of connected line segments | |
| GL_LINE_LOOP | series of connected line segments with a segment added between last and first vertices | |
| GL_TRIANGLES | triangles, each specified by 3 vertices | |
| GL_TRIANGLE_STRIP | linked strip of triangles, a vertex may be shared by 2 or more triangles | |
| GL_TRIANGLE_FAN | linked fan of triagnles, all have a common vertex | |
| GL_QUADS | four-sided polygons, each joining four vertices | |
| GL_QUAD_STRIP | linked strip of quadrilaterals, shared vertices | |
| GL_POLYGON | simple bounded convex polygon |
#sample Makefile for using OpenGL in Linux
PROG = draw
CFLAGS = -w -s -O2 -ansi -DSHM
XLIBS = -lX11 -lXext -lXmu -lXext -lXmu -lXt -lXi -lSM -lICE
LIBS = -lglut -lGLU -lGL
INCLS = -I/usr/X11R/include -I/share/mesa/include
LIBDIR = -L/usr/X11/lib -L/usr/X11R6/lib
#source codes
SRCS = draw_main.cpp draw.cpp
#substitute .cpp by .o to obtain object filenames
OBJS = $(SRCS:.cpp=.o)
#$< evaluates to the target's dependencies,
#$@ evaluates to the target
$(PROG): $(OBJS)
g++ -o $@ $(OBJS) $(LIBDIR) $(LIBS) $(XLIBS)
$(OBJS):
g++ -c $*.cpp $(INCLS)
clean:
rm $(OBJS) $(PROG)
|
| Pattern | Factor | ||||||
|---|---|---|---|---|---|---|---|
| 0x00FF | 1 | ||||||
| 0x00FF | 2 | ||||||
/*
* lines.c
* This program demonstrates geometric primitives and
* their attributes.
*/
#include <GL/glut.h>
#include <stdlib.h>
#define drawOneLine(x1,y1,x2,y2) glBegin(GL_LINES); \
glVertex2f ((x1),(y1)); glVertex2f ((x2),(y2)); glEnd();
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glShadeModel (GL_FLAT);
}
void display(void)
{
int i;
glClear (GL_COLOR_BUFFER_BIT);
/* select white for all lines */
glColor3f (1.0, 1.0, 1.0);
/* in 1st row, 3 lines, each with a different stipple */
glEnable (GL_LINE_STIPPLE);
glLineStipple (1, 0x0101); /* dotted */
drawOneLine (50.0, 125.0, 150.0, 125.0);
glLineStipple (1, 0x00FF); /* dashed */
drawOneLine (150.0, 125.0, 250.0, 125.0);
glLineStipple (1, 0x1C47); /* dash/dot/dash */
drawOneLine (250.0, 125.0, 350.0, 125.0);
/* in 2nd row, 3 wide lines, each with different stipple */
glLineWidth (5.0);
glLineStipple (1, 0x0101); /* dotted */
drawOneLine (50.0, 100.0, 150.0, 100.0);
glLineStipple (1, 0x00FF); /* dashed */
drawOneLine (150.0, 100.0, 250.0, 100.0);
glLineStipple (1, 0x1C47); /* dash/dot/dash */
drawOneLine (250.0, 100.0, 350.0, 100.0);
glLineWidth (1.0);
/* in 3rd row, 6 lines, with dash/dot/dash stipple */
/* as part of a single connected line strip */
glLineStipple (1, 0x1C47); /* dash/dot/dash */
glBegin (GL_LINE_STRIP);
for (i = 0; i < 7; i++)
glVertex2f (50.0 + ((GLfloat) i * 50.0), 75.0);
glEnd ();
/* in 4th row, 6 independent lines with same stipple */
for (i = 0; i < 6; i++) {
drawOneLine (50.0 + ((GLfloat) i * 50.0), 50.0,
50.0 + ((GLfloat)(i+1) * 50.0), 50.0);
}
/* in 5th row, 1 line, with dash/dot/dash stipple */
/* and a stipple repeat factor of 5 */
glLineStipple (5, 0x1C47); /* dash/dot/dash */
drawOneLine (50.0, 25.0, 350.0, 25.0);
glDisable (GL_LINE_STIPPLE);
glFlush ();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);
}
void keyboard(unsigned char key, int x, int y)
{
switch (key) {
case 27:
exit(0);
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (400, 150);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutMainLoop();
return 0;
}
|
Each polygon in a scene is contained within a plane of infinite extent
glEnable( GL_CULL_FACE );
glCullFace ( GL_BACK );
glColor3f( 1.0, 0.0, 0.0 ); //red
glFrontFace ( GL_CCW );
glPolygonMode( GL_FRONT, GL_FILL );
glBegin( GL_POLYGON ); //draw solid polygon
glVertex2i( 0, 0 );
glVertex2i( 0, 100 );
glVertex2i( 100, 100 );
glVertex2i( 100, 0 );
glEnd();
|
| What do you expect to see on the display, assuming everything has been initialized properly? |
| n-1 | ||
| A = ½ | ![]() |
xi yi+1 - xi+1 yi |
| i=0 |
|
|
|
|