Three-Dimensional Graphics A 3D point (x,y,z) – x,y, and Z coordinates We will still use column vectors to represent points Homogeneous coordinates of a 3D point (x,y,z,1) Transformation will be performed using 4x4 matrix T y x z
Right hand coordinate system X x Y = Z ; Y x Z = X; Z x X = Y; Y y z x +z x Left hand coordinate system Right hand coordinate system
3D transformation Very similar to 2D transformation Translation x’ = x + tx; y’ = y + ty; z’ = z + tz X’ 1 0 0 tx X Y’ 0 1 0 ty Y Z’ 0 0 1 tz Z 1 0 0 0 1 1 OpenGL - glTranslated(tx, ty, tz); = homogeneous coordinates
3D transformation Scaling X’ = X * Sx; Y’ = Y * Sy; Z’ = Z * Sz X’ Sx 0 0 0 X Y’ 0 Sy 0 0 Y Z’ 0 0 Sz 0 Z 1 0 0 0 1 1 OpenGL - glScaled(Sx, Sy, Sz); =
3D transformation look down negative axis) 3D rotation is done around a rotation axis Fundamental rotations – rotate about x, y, or z axes Counter-clockwise rotation is referred to as a positive rotation (when you look down negative axis) x y z +
3D transformation Rotation about Z – similar to 2D rotation x’ = x cos(q) – y sin(q) y’ = x sin(q) + y cos(q) z’ = z y x + cos(q) -sin(q) 0 0 sin(q) cos(q) 0 0 0 0 1 0 0 0 0 1 z OpenGL - glRotatef(q, 0,0,1)
3D transformation Rotation about y z’ = z cos(q) – x sin(q) + Rotation about y z’ = z cos(q) – x sin(q) x’ = z sin(q) + x cos(q) y’ = y cos(q) 0 sin(q) 0 0 1 0 0 -sin(q) 0 cos(q) 0 0 0 0 1 z x y + OpenGL - glRotatef(q, 0,1,0)
3D transformation Rotation about x y’ = y cos(q) – z sin(q) + Rotation about x y’ = y cos(q) – z sin(q) z’ = y sin(q) + z cos(q) x’ = x 1 0 0 0 0 cos(q) -sin(q) 0 0 sin(q) cos(q) 0 0 0 0 1 y z x + OpenGL - glRotatef(q, 1,0,0)
3D transformation Arbitrary rotation axis (rx,ry,rz) Text pp. 193 explains how to do it We omit the detail here Use OpenGL: glRotatef(angle, rx, ry, rz) Can fill in all 9 entries of the rotation matrix. x z y (rx, ry, rz)
OpenGL Transformation Composition A global modeling transformation matrix (GL_MODELVIEW, called it M here) glMatrixMode(GL_MODELVIEW) The user is responsible to reset it if necessary glLoadIdentity() -> M = 1 0 0 0 1 0 0 0 1
OpenGL Transformation Composition Matrices for performing user-specified transformations are multiplied to the current matrix For example, 1 0 1 glTranslated(1,1 0); M = M x 0 1 1 0 0 1 All the vertices defined within glBegin() / glEnd() will first go through the transformation (modeling transformation) P’ = M x P
Transformation Pipeline Object Local Coordinates Object World Coordinates Modeling transformation …