|
![]() |
![]() |
|
|
![]() |
![]() |
|
| Warcraft | Halo 3 |

![]() |
A Perceptron laser scanner scanned the original fan blade, and generated a point cloud with around 2.2 million points that was brought into DSSP software. |
DSSP software was used to automatically generate a NURBS surface model, which could be imported into Pro/ENGINEER software. |
| ||
a face model described by
Facial Definition Parameters ( FDPs ) and animated using
Facial Animation Parameters ( FAPs ).
body is described by body animation parameters ( BAP )

See also http://coven.lancs.ac.uk/mpeg4/
glBegin( GL_POINTS ); glVertex2i( 100, 40 ); glVertex2i( 120, 50 ); glVertex2i( 140, 80 ); glEnd();
| glVertex2i(...) | |||
| gl gl library |
Vertex basic command |
2 number of arguments |
i type of arguments |
| Suffix | Data Type | Corresponding C type |
OpenGL Type Deinfition |
|---|---|---|---|
| b | 8-bit Integer | signed char | GLbyte |
| s | 16-bit Integer | short | GLshort |
| i | 32-bit Integer | int or long | GLint, GLsizei |
| f | 32-bit Floating-point | float | GLfloat, GLclampf |
| d | 64-bit Integer | double | GLdouble, GLclampd |
| ub | 8-bit Unsigned Integer | unsigned char | GLubyte, GLboolean |
| us | 16-bit Unsigned Integer | signed short | GLushort |
| ui | 32-bit Unsigned Integer | unsigned int or unsigned long | GLuint, GLenum, GLbitfield |
//draw.cpp : demo program for drawing 3 dots, two lines, ploylines, rectangles
#include <GL/glut.h>
//initialization
void init( void )
{
glClearColor( 1.0, 1.0, 1.0, 0.0 ); //get white background color
glColor3f( 0.0f, 0.0f, 0.0f ); //set drawing color
glPointSize( 4.0 ); //a dot is 4x4
glMatrixMode( GL_PROJECTION ); //subsequent calls affect projection matrices
glLoadIdentity(); //replace current matrix with identity matrix
gluOrtho2D( 0.0, 500.0, 0.0, 500.0 );
}
void display( void )
{
glClear( GL_COLOR_BUFFER_BIT ); //clear screen
glBegin( GL_POINTS ); //draw points
glVertex2i( 100, 50 ); //draw a point
glVertex2i( 100, 150 ); //draw a point
glVertex2i( 200, 200 ); //draw a point
glEnd();
glBegin( GL_LINES ); //draw lines
glVertex2i( 20, 20 ); //horizontal line
glVertex2i( 400, 20 );
glVertex2i( 20, 10 ); //vertical line
glVertex2i( 20, 400 );
glEnd();
glBegin( GL_LINE_STRIP ); //draw polyline
glVertex2i( 200, 100 );
glVertex2i( 300, 100 );
glVertex2i( 450, 200 );
glVertex2i( 200, 100 );
glEnd();
glColor3f( 0.6, 0.6, 0.6 ); //bright grey
glRecti( 400, 400, 450, 480 );
glColor3f( 1.0, 0.0, 0.0 ); //red
glRecti( 350, 350, 380, 390 );
glFlush(); //send all output to screen
}
------------------------------------------------------------------------------
//draw_main.cpp: main loop of drawing program
#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
//initialization
void init(void);
//does the drawing
void display(void);
/* Main Loop
* Open window with initial window size, title bar,
* RGBA display mode, depth buffer.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv); //initialize toolkit
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB ); //set display mode: single bufferring, RGBA model
glutInitWindowSize(500, 500); //set window size on screen
glutInitWindowPosition( 100, 150 ); //set window position on screen
glutCreateWindow(argv[0]); //open screen window
init();
glutDisplayFunc (display); //points to display function
glutMainLoop(); //go into perpetual loop
return 0;
}
|
//mouse_key.cpp
#include <GL/glut.h>
#include <stdlib.h>
#define screenHeight 500
//initialization
void init( void )
{
glClearColor( 1.0, 1.0, 1.0, 0.0 ); //get white background color
glColor3f( 0.0f, 0.0f, 0.0f ); //set drawing color
glPointSize( 4.0 ); //a dot is 4x4
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluOrtho2D( 0.0, 500.0, 0.0, 500.0 );
} //init
void display()
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glFlush();
}
void drawDot( int x, int y )
{
glBegin( GL_POINTS );
glVertex2i( x, y ); //draw a points
glEnd();
} //drawDot
void myMouse( int button, int state, int x, int y )
{
if ( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN )
drawDot( x, screenHeight - y );
glFlush(); //send all output to screen
}
void myMovedMouse( int mouseX, int mouseY)
{
GLint x = mouseX;
GLint y = screenHeight - mouseY;
GLint brushsize = 6;
glColor3f( 1.0, 0.0, 0.0 );
glRecti ( x, y, x + brushsize, y + brushsize );
glFlush();
} //myMovedMouse
void myKeyboard ( unsigned char key, int mouseX, int mouseY )
{
GLint x = mouseX;
GLint y = screenHeight - mouseY;
switch( key )
{
case 'p':
drawDot ( x, y );
break;
case 'e':
exit ( -1 );
default :
break;
}
}
//mouse_key_main.cpp: main loop of drawing program
#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
//initialization
void init(void);
void myMouse( int button, int state, int x, int y);
void myMovedMouse( int mouseX, int mouseY);
void myKeyboard ( unsigned char key, int x, int y );
void display( void );
/* Main Loop
* Open window with initial window size, title bar,
* RGBA display mode, depth buffer.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv); //initialize toolkit
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB ); //set display mode
glutInitWindowSize(500, 500); //set window size on screen
glutInitWindowPosition( 100, 150 ); //set window position on screen
glutCreateWindow(argv[0]); //open screen widow
init();
glutMouseFunc( myMouse );
glutMotionFunc( myMovedMouse );
glutKeyboardFunc( myKeyboard );
glutDisplayFunc( display );
glutMainLoop(); //go into perpetual loop
return 0;
}
------------------------------------------------------------------
#sample Makefile for using OpenGL of Red Hat Linux 7.x
#CS 420, Tong Yu, Fall 2002
PROG = mouse_key
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 = mouse_key_main.cpp mouse_key.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)
|
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 |
|
|