linear interpolation
DESCRIPTION
Linear Interpolation. The original grade. Midterm _Grade =a* O ld_Grade+(1-a)* New_Grade. The grade after you redo Some problems. Midterm _Grade = 1* O ld_Grade+0* New_Grade = Old_Grade. If a=1, If a=0, If a=0.5,. Midterm _Grade = 0* O ld_Grade+1* New_Grade = New _Grade. - PowerPoint PPT PresentationTRANSCRIPT
Linear Interpolation
• If a=1,
• If a=0,
• If a=0.5,
Midterm_Grade=a*Old_Grade+(1-a)*New_Grade
The original grade
The grade after you redo Some problems
Midterm_Grade = 1*Old_Grade+0*New_Grade = Old_Grade
Midterm_Grade = 0*Old_Grade+1*New_Grade = New_Grade
Midterm_Grade = 0.5*Old_Grade+0.5*New_Grade =(Old_Grade+New_Grade)*0.5
Linear Interpolation
• Now if you change the grade into two vertices:
V0
V1
Va=a*V1+(1-a)*V0
a=1
a=0
V0.5
a=0.5a=0.25
a=0.75
a>1
a<0This is how we define a line, a line segment, or a ray.
Linear Interpolation
• Now if know V1, V2, and V, how do you know a instead?
• We know:
V0
V1
V=a*V1+(1-a)*V0
Va
V-V0=a*(V1-V0)
a=|V-V0|/|V1-V0|
|V1-V0|
|V-V0|
Linear Interpolation• Now if you have two values C0 and C1 (color, depth, texture
coordinates…) at V0 and V1, how to get the value Ca at V:
V0
V1
Ca=a*C1+(1-a)*C0
Va
|V1-V0|
|V-V0|
C0
C1
Ca???
a=|V-V0|/|V1-V0|
Midterm Grading Formula
• Option 1: No new grade, just curve it. (a=1)
• Option 2: Redo two questions, take the average and curve it. (a=0.5)
• Option 3: Redo two questions, take the average but no curve. (a=0.5, b=1)
• Option 4: Redo all questions, take the average but no curve. (a=0.5, b=1)
Midterm_Grade=(a*Old_Grade+(1-a)*New_Grade)b
a: Interpolation coefficient b: Curve coefficient
Midterm Grading Formula• Redo two questions• Pro: less work for you (and for me)• Con: depends on the choice of questions, not very
fair for some people:• A: 3+3+3+3+3=15 (old); 3+5+5+3+3=19 (new).• B: 5+0+0+5+5=15 (old); 5+5+5+5+5=25 (new).
• Redo all questions• Con: more work• Pro: you get the second chance to learn; and it is
relatively fair
Midterm Grading Formula
• Details:
• Return the graded old exam package to you now (on Wednesday). So you know which answer is wrong and which is right.
• Only the old grade, but not the exam package. You know your overall performance, but don’t know which answer is wrong exactly.
• After you submit your new answers, you will get the graded old exam package.
Homogenous Space Vs. 3D Space
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
A point in the 3D Space
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in the homogenous Space (4D)
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
A point in the 3D Space
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in the homogenous Space
Homogenous Space Vs. 3D Space
a wb wc w
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥=
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
A point in the 3D Space
abcw
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in the homogenous Space
a wb wc ww w
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥=
a wb wc w1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
What if w is not 1? Scale it by 1/w!
Projection and Transformation
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
A point in the 3D Space
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in the homogenous Space (4D)
a b c de f g hi j k lm n o p
⎡
⎣
⎢⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥⎥
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
Multiply it by your matrix
abcw
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
Your result in the homogenous Space (4D)
a wb wc w
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
Your solution in 3D!
Projection and Transformation
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
abc1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
Transformation won’t change w. w is always 1.
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
M
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
abcw
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
Projection changes w!
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
P
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
a wb wc w
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
Depth Value(Z value)
2D image location
Transformation
x 'y 'z '1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in an absolute space
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
M
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
Its changed position in the absolute space
One way to understand the transformation:
Transformation
x 'y 'z '1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in one space
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
M
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
The same point, but in a new space
Another way to understand the transformation:
Transformationx 'y 'z '1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in the local space(or called the model space)
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
Mmodelview
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in the eye space(or called the camera space)
x 'y 'z '1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in the local space(or called the model space)
xyz1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
Mmodelview−1
x'y'z'1
⎡
⎣
⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥
A point in the eye space(or called the camera space)
Transformation
glLoadIdentity();glRotatef(…);glTranslatef(…);glScalef(…);glBegin(GL_POINTS);glVertex3fv(v);glEnd();
I
R
T
S
Mmodelview =I
Mmodelview =IR
Mmodelview =IRT
Mmodelview =IRTS
(eye space -> eye space)
(space No. 1 -> eye space)
(space No. 2 -> eye space)
(space No. 3 -> eye space)
Mmodelviewv=IRTSv=v'(space No. 3 -> eye space)
Transformation
Mmodelview =
m 00 m 01 m 02 m 03
m 10 m 11 m 12 m 13
m 20 m 21 m 22 m 23
1
⎡
⎣
⎢⎢⎢⎢⎢
⎤
⎦
⎥⎥⎥⎥⎥
The matrix not only transforms a vertex from the localspace into the eye space, it also tells us how the local space looks like in the eye space:
The local OriginThe local Y axis
The local X axis The local Z axis
Transformation
glLoadIdentity();//Camera motions (also as transformation)
//Do more transformations
glBegin(GL_POINTS);glVertex3fv(v);glEnd();
Eye space
World space
Local space
Mviewing
Mmodeling
Mmodelview
OpenGL only has the modelview matrix, which really contains two steps: viewing and modeling.
Shading
V0 V1
Phong ShadingVs
f(Vs)f(V0) f(V1)
• Now you did projection, you have polygons in 2D.• You do rasterization, so you have scanlines. Each line have
two endpoints and you have a lot of pixels between them.• Suppose you have a function f(x) that can give you a value at
any point, how do you use it to get a value for each pixel?
Shading
V0 V1
• Now you did projection, you have polygons in 2D.• You do rasterization, so you have scanlines. Each line have
two endpoints and you have a lot of pixels between them.• Suppose you have a function f(x) that can give you a value at
any point, how do you use it to get a value for each pixel?
Flat ShadingVs
f(V0)f(V0) f(V0) f(V0) f(V0) f(V0)
Shading
V0 V1
Gouroud ShadingVs
sf(V1)+(1-s)f(V0)f(V0) f(V1)
• Now you did projection, you have polygons in 2D.• You do rasterization, so you have scanlines. Each line have
two endpoints and you have a lot of pixels between them.• Suppose you have a function f(x) that can give you a value at
any point, how do you use it to get a value for each pixel?
Geometric Modeling
Basic GLUT Shapes• Spheres
• Cones
• Cubes
glutWireSphere(radius, slices, stacks)
glutSolidSphere(radius, slices, stacks)
glutWireCone(radius, height, slices, stacks)
glutSolidCone(radius, height, slices, stacks)
glutWireCube(size)
glutSolidCube(size)
Basic GLUT Shapes• Torus
• Teapot
• Polyhedron
glutWireTorus(inner_radius, outer_radius, slices, stacks)
glutSolidTorus(inner_radius, outer_radius, slices, stacks)
glutWireTeapot(size)
glutSolidTeapot(size)
glutWireDodecahedron(void)
glutWireOctahedron(void)
glutWireTetrahedron(void)
glutWireIcosahedron(void)
Basic GLUT Shapes• GLUT shapes and normals are pre-defined.
• They are typically centered at the origin.
• To move them to suitable locations, you should apply transformations to them.
• Most of them do not have texture coordinates. (But the teapot has texture coordinates. Someone must really like the teapot…)
About the Teapot• It was created by Martin Newell at the University of Utah in
1975.
• It was the unofficial graphics mascot. (What is the current one?)
• Pixar gave away free teapot toys every year during ACM SIGGRAPH conference. Try to get one if you have chance.
Basic GLU Shapes• GLU also has some primitive shapes.
• The draw style: GL_FILL, GL_LINE, GL_SILHOUETTE, GL_POINT.
• The orientation: GL_OUTSIDE, GL_INSIDE.• Normal: GL_NONE, GL_FLAT, GL_SMOOTH.• Texture: GL_FALSE, GL_TRUE.
GLUquadric* quad= gluNewQuadric();gluQuadricDrawStyle(quad, draw);gluQuadricOrientation(quad, orientation);gluQuadricNormals(quad, normal);gluQuadricTexture(quad, texture);gluCylinder(quad, base, top, height, slices, stacks);gluDeleteQuadric(quad);
Basic GLU Shapes
• More complicated to use (than GLUT shapes).
• But they also have more options.
• Still not flexible enough to change many things.
Parametric Surfaces
• A sphere can be defined the polar coordinates/spherical coordinates (θ, ϕ).
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥=
rsinθ sinφrcosφrcosθsinφ
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
0 ≤θ ≤2π0 ≤φ ≤π
Creating a Sphere• The basic idea is to sample over (θ, ϕ).
2D Parameter Space 3D Space
θ
ϕ
(0, 0)
(2π, π)
(i, j) (i+1, j)
(i, j+1) (i+1, j+1)
Creating a Sphere• The code
for(i=0; i<n; i++)for(j=0; j<n; j++){
theta=i*2*PI/n;phi =j*PI/n;next_theta=(i+1)*2*PI/n;next_phi =(j+1)*PI/n;glBegin(GL_QUAD);glVertex3f(…i , j… );glVertex3f(…i+1, j… );glVertex3f(…i+1, j+1…);glVertex3f(…I , j+1…);glEnd();
}
Parametric Surfaces
• An ellipsoid is a scaled sphere.
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥=
rx sinθsinφrycosφ
rz cosθsinφ
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
0 ≤θ ≤2π0 ≤φ ≤π
Creating an Ellipsoid
• The basic idea is the same as creating a sphere, except that it uses different radii for different axes.
• It is wrong to create a sphere and then simply scale it. Why?
• Normal calculation is not straightforward. It needs more math, or some approximation.
Creating a Cylinder• The basic idea is to sample over (θ, h).
2D Parameter Space 3D Space
θ
h
(0, 0)
(2π, H)
(i, j) (i+1, j)
(i, j+1) (i+1, j+1)
Creating a Cylinder• The code
for(i=0; i<n; i++)for(j=0; j<n; j++){
theta=i*2*PI/n;phi =j*H/n;next_theta=(i+1)*2*PI/n;next_phi =(j+1)*H/n;glBegin(GL_QUAD);glVertex3f(…i , j… );glVertex3f(…i+1, j… );glVertex3f(…i+1, j+1…);glVertex3f(…I , j+1…);glEnd();
}
xyz
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥=
rsinθhrcosθ
⎡
⎣
⎢⎢⎢
⎤
⎦
⎥⎥⎥
0 ≤θ ≤2π0 ≤h≤H