Surface Rendering OpenGL

parakeetincurableΛογισμικό & κατασκευή λογ/κού

13 Δεκ 2013 (πριν από 3 χρόνια και 8 μήνες)

113 εμφανίσεις

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