From ab68b1a6b2454585adbede7b4c5fb6a7c8d68650 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 9 Jun 2014 22:24:36 -0400 Subject: Add rotation transformations for x and y axes. * 2d/transform.scm (rotate-x, rotate-y, rotate-z): New procedures. (transform-rotate): Renamed. (make-transform*): Use rotate-z for now. --- 2d/transform.scm | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to '2d') diff --git a/2d/transform.scm b/2d/transform.scm index 8efd8be..09e4398 100644 --- a/2d/transform.scm +++ b/2d/transform.scm @@ -40,9 +40,8 @@ transform* transform-translate transform-scale - transform-rotate - orthographic-projection - perspective-projection)) + rotate-x rotate-y rotate-z + orthographic-projection perspective-projection)) (define-record-type (%make-transform matrix) @@ -83,7 +82,7 @@ column-major format." given TRANSLATE, SCALE, and ROTATE values. Both TRANSLATE and SCALE are vector2 values, while ROTATE is a number." (transform* (transform-scale scale) - (transform-rotate rotate) + (rotate-z rotate) (transform-translate translate))) (define null-transform @@ -166,7 +165,20 @@ V." 0 0 1 0 0 0 0 1)) -(define (transform-rotate angle) +(define (rotate-x angle) + "Return a new transform that rotates the X axis by ANGLE radians." + (make-transform 1 0 0 0 + 0 (cos angle) (- (sin angle)) 0 + 0 (sin angle) (cos angle) 0 + 0 0 0 1)) + +(define (rotate-y angle) + "Return a new transform that rotates the Y axis by ANGLE radians." + (make-transform (cos angle) 0 (sin angle) 0 + 0 1 0 0 + (- (sin angle)) 0 (cos angle) 0 + 0 0 0 1)) +(define (rotate-z angle) "Return a new transform that rotates the Z axis by ANGLE radians." (make-transform (cos angle) (- (sin angle)) 0 0 (sin angle) (cos angle) 0 0 -- cgit v1.2.3