1 viewing transformation tong-yee lee. 2 changes of coordinate system world coordinate system camera...
Post on 22-Dec-2015
227 views
TRANSCRIPT
3
Default Camera Position and Orientation
The default camera is with eye at the origin (0,0,0) and theaxis of the pyramid aligned with the z-axis. The eye is lookingdown the negative z-axis.
17
Why B is orthonormal?
0
0000
000
231322122111
332313222212
11211121
vvvv
vvuu
In above equation, 0 is due to vi.vj=0 i!=j
1
0000
001
131312121111
331313221212
11111111
vvvv
vvuu
18
b1=Bw->1aw
aw=Bw->1Tb1=B-
w->1b1
b2=Bw->2aw
aw=Bw->2Tb2=B-
w->2b2
B-w->1b1=B-
w->2b2
Bw->1B-w->1b1= Bw->1B-
w->2b2
b1= Bw->1B-w->2 b2= Bw->1B2->w b2
21
a is coordinate in (v1,v2,v3) system (usually is world coordinate)b is coordinate in (u1,u2,u3) systemB is easily remembered by carefully checking BThe first row: u1 projects on three axes v1,v2,v3The second row: u2 projects on three axes v1,v2,v3The third row: u3 projects on three axes v1,v2,v3How about B’ for c is coordinate in (w1,w2,w3) for b converted toc? (i.e. c=B’b)
332313
322212
312111
uwuwuw
uwuwuw
uwuwuw
BThis is same as previousmatrix composition by way oftransforming to world coordinate
36
v1=(1,0,0), v2=(0,1,0) and v3(0,0,1)
1
0
0
0
1
).,,(),,(
1000
z
y
x
zyx
zzyx
yzyx
xzyx
eye
eye
eye
V
neyeveyeueyeddd
dnnn
dvvv
duuu
V
38
1
0
0
0
1
).,,(),,(
1000
z
y
x
zyx
zzyx
yzyx
xzyx
eye
eye
eye
V
neyeveyeueyeddd
dnnn
dvvv
duuu
V
Note that matrix storage order is column majorin OpenGL
39
Treat yourself (viewer) as a airplane heading to –ZcNote that: as a viewer is moving, the object is moving inopposite direction on the viewing plane!!
u (i.e., x) axis n (i.e.,z) axis v (i.e., y) axis
41
u’
u
n
n’ n
v
n’v’
vectorsunitallareununNote
unu
unn
,,,:
)cos()sin(
)sin()cos(
This is y-like rotation
This is x-like rotation
42
How about pitch() and yaw()?Same stories as roll().7.3.1. Implementing pitch() and yaw().void Camera :: pitch (float angle){ // pitch the camera through angle degrees around Ufloat cs = cos(3.14159265/180 * angle);float sn = sin(3.14159265/180 * angle);Vector3 t(v); // remember old vv.set(cs*t.x + sn*n.x, cs*t.y + sn*n.y, cs*t.z + sn*n.z);
n.set(-sn*t.x + cs*n.x, -sn*t.y + cs*n.y, -sn*t.z + cs*n.z);setModelViewMatrix();
}void Camera :: yaw (float angle){ // yaw the camera through angle degrees around Vfloat cs = cos(3.14159265/180 * angle);float sn = sin(3.14159265/180 * angle);Vector3 t(n); // remember old vn.set(cs*t.x + sn*u.x, cs*t.y + sn*u.y, cs*t.z + sn*u.z);
u.set(-sn*t.x + cs*u.x, -sn*t.y + cs*u.y, -sn*t.z + cs*u.z);setModelViewMatrix();
}
43
How about slide()Sliding a camera means to move it along one of its own axes-that is in the u,v,n direction-without rotating it.
Along n means forward or backwardAlong u is left and rightAlong v is up and down
Assume slide(delU, delV, delN)