Surface Rendering
With
OpenGL
CS460 Project
by Rui Yu
11/30/03
Two aspects
•
Windowing system or user interface
Use MFC
Create a window
Viewport is the client area of the window
Capture mouse move events in the client area
Add buttons on a tools bar
•
OpenGL commands
Use gl,glu fuctions
Viewing pipeline
Surface rendering
Viewing pipeline
ChoosePixelFormat // Define pixel format
wglCreateContext //Create rendering context.
glMatrixMode(GL_MODELVIEW);
glRotatef //rotate
glScalef //scale
glMatrixMode(GL_PROJECTION)
glOrtho(
-
1,1,
-
1,1,
-
1,1); //
Parellel projection
glViewport(0, 0, cx, cy);
glBegin(GL_LINES); //or GL_POLYGON and etc.
glVertex3d
glVertex3d
glEnd;
SwapBuffers;
3D modeling coordinates
3D world coordinates
Modeling transformation
Clipping & projection
2D device coordinates
Transform into viewport
Example
:
•
Pixel Format: DOUBLE BUFFER, RGBA, DRAW_TO_WINDOW
•
View volume:
draw points
position of cursor is unprojected
to a 3d vertex. Here shows its
model coordinates
Screen Shots (1)
-
draw 3D points interactively
Screen Shots (2)
-
draw 3D bezier surface with zoom and rotation
draw the
surface
Rotate
Zoom
in
Zoom
out
Drag of mouse defines
rotation angle and
direction as shown here
This is a bezier surface
with control points defined
on a cylinder
Shading
The Mathematics of Lighting:
vertex color =
global ambient light * ambient material +
i
attenuation factor *I
i
*
[ ambient light *ambient material +
(max {
1
x
n
, 0 } ) * diffuse light * diffuse material +
(max {
s
x
n
,0} )*shininess * specular light * specular material ]
l
: the unit vector that points from the vertex to the light position
n
: the unit normal vector at the vertex.
Default Lighting Value:
Global Ambient Light: {
0.2, 0.2, 0.2, 1.0 };
Table2: Default Values for glMaterial()
Parameter Name
Default Value
Meaning
GL_AMBIENT
(0.2, 0.2, 0.2, 1.0)
ambient color of material
GL_DIFFUSE
(0.8, 0.8, 0.8, 1.0)
diffuse color of material
GL_SPECULAR
(0.0, 0.0, 0.0, 1.0)
specular color of material
GL_SHININESS
0.0
specular exponent
Table1: Default Values for glLight0()
Parameter Name
Default Value
Meaning
GL_AMBIENT
(0.0, 0.0, 0.0, 1.0)
ambient RGBA intensity of light
GL_DIFFUSE
(1.0, 1.0, 1.0, 1.0)
diffuse RGBA intensity of light
GL_SPECULAR
(1.0, 1.0, 1.0, 1.0)
specular RGBA intensity of light
GL_POSITION
(0.0, 0.0, 1.0, 0.0)
(x, y, z, w) position of light
Screen Shots (3)
-
Change light intensity and material property (1)
Back of surface is dark as
ambient light of light0 is 0. Only
global ambient(0.2) works here.
Opens a dialogue to
change default values.
Screen Shots (4)
-
Change light intensity and material property (2)
After increase the ambient
light, the back of the
surface becomes brighter
Screen Shots (5)
-
Drag control points of bezier surface and texture mapping (1)
Bezier surface with 16
control points initially on a
plane
old and new postion of the
control point
enable move
control points
drag a control point with
mouse
show control
points
Screen Shots (6)
-
Drag control points of bezier surface and texture mapping (2)
shade
texture
mapping
The surface drawn by
moving control points
bibliography
•
Msdn
http://www.msdn.com
•
OpenGL Programming Guide or 'The Red Book’
from Silicon Graphics, Inc
•
Guide to OpenGL on Windows from Silicon Graphics
http://www.opengl.org/developers/documentation/overviews.html
•
OpenGL Win32 Tutorial
http://www.nullterminator.net/opengl32.html
http://www.opengl.org/developers/code/tutorials.html
•
Basic Curves And Surfaces Modeler by Sharjith
http://www.codeproject.com/useritems/cadsurf.asp
Enter the password to open this PDF file:
File name:
-
File size:
-
Title:
-
Author:
-
Subject:
-
Keywords:
-
Creation Date:
-
Modification Date:
-
Creator:
-
PDF Producer:
-
PDF Version:
-
Page Count:
-
Preparing document for printing…
0%
Comments 0
Log in to post a comment