450 likes | 675 Views
Viewing Transformation. Tong-Yee Lee. Changes of Coordinate System. World coordinate system. Camera (eye) coordinate system. Default Camera Position and Orientation. The default camera is with eye at the origin (0,0,0) and the axis of the pyramid aligned with the z-axis. The eye is looking
E N D
Viewing Transformation Tong-Yee Lee
Changes of Coordinate System World coordinate system Camera (eye) coordinate system
Default Camera Position and Orientation The default camera is with eye at the origin (0,0,0) and the axis of the pyramid aligned with the z-axis. The eye is looking down the negative z-axis.
In this equation, a is world coordinate, B will convert a to b (in another coordinate system)
Why B is orthonormal? In above equation, 0 is due to vi.vj=0 i!=j
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
Consider a special case as v1=(1,0,0), v2=(0,1,0) and v3(0,0,1)
a is coordinate in (v1,v2,v3) system (usually is world coordinate) b is coordinate in (u1,u2,u3) system B is easily remembered by carefully checking B The first row: u1 projects on three axes v1,v2,v3 The second row: u2 projects on three axes v1,v2,v3 The third row: u3 projects on three axes v1,v2,v3 How about B’ for c is coordinate in (w1,w2,w3) for b converted to c? (i.e. c=B’b) This is same as previous matrix composition by way of transforming to world coordinate
X axis vector Y axis vector Z axis vector
Not easy for user to pick up exact up vector!! So, we compute v automatically from up vector.
b a n b’ n b
b a n • Another way ……………….. • a = b’ x n • b = n x a
u (i.e., x) axis n (i.e.,z) axis v (i.e., y) axis Treat yourself (viewer) as a airplane heading to –Zc Note that: as a viewer is moving, the object is moving in opposite direction on the viewing plane!!
v’ n’ n u n’ v n u’ This is x-like rotation This is y-like rotation
How about pitch() and yaw()? 7.3.1. Implementing pitch() and yaw(). void Camera :: pitch (float angle) { // pitch the camera through angle degrees around U float cs = cos(3.14159265/180 * angle); float sn = sin(3.14159265/180 * angle); Vector3 t(v); // remember old v v.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 V float cs = cos(3.14159265/180 * angle); float sn = sin(3.14159265/180 * angle); Vector3 t(n); // remember old v n.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(); } • Same stories as roll().
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 backward • Along u is left and right • Along v is up and down • Assume slide(delU, delV, delN)