From e3fcf269cb622be28aaedba8dd77372a0c427f38 Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Sun, 17 Jun 2012 15:39:56 -0700 Subject: [PATCH] got rotate for models working. now working on axis specific stretch --- math.lisp | 8 ++++++-- model.lisp | 12 ++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/math.lisp b/math.lisp index 60d4442..0475ddb 100644 --- a/math.lisp +++ b/math.lisp @@ -22,7 +22,7 @@ (float (+ start (* (- end start) (if (eql now 0.0) 0.0 (/ (min now duration) duration))))))) -;; returns a real lisp 2d array +;; returns a real lisp 2d array: args in radians (defun make-rotation-matrix (xa ya za) (let ((sxa (sin xa)) (cxa (cos xa)) @@ -59,6 +59,9 @@ (defun scale-vector (v a) (make-array (length v) :initial-contents (loop for i across v collecting (* i a)))) +(defun scale-points (points a) + (make-array (length points) :initial-contents (loop for v across points collecting (scale-vector v a)))) + ; returns a vector with all elemts scaled to biggest 1 which is scaled to 1 ; e.x. (scale-vector (8 4 2)) -> (1 .5 .25) (defun scale-vector-1 (v) @@ -81,4 +84,5 @@ (make-array (length v1) :initial-contents (loop for i from 0 to (1- (length v1)) collecting (- (aref v1 i) (aref v2 i))))) (defun vector+ (v1 v2) - (make-array (length v1) :initial-contents (loop for i from 0 to (1- (length v1)) collecting (+ (aref v1 i) (aref v2 i))))) \ No newline at end of file + (make-array (length v1) :initial-contents (loop for i from 0 to (1- (length v1)) collecting (+ (aref v1 i) (aref v2 i))))) + diff --git a/model.lisp b/model.lisp index 1eb85e4..2f25832 100644 --- a/model.lisp +++ b/model.lisp @@ -59,7 +59,7 @@ ; point up along +z, flat facing +y (into) (defparameter *3pyramid-flat-points* - '((0.0 0.5 -0.5) (-0.5 -0.5 -0.5) (0.5 -0.5 -0.5) (0.0 -0.5 0.5))) + '((0.0 -0.5 -0.5) (0.0 0.5 0.5) (-0.5 -0.5 0.5) (0.5 -0.5 0.5))) (defparameter *colors* (make-hash-table :test 'equal)) (setf (gethash "red" *colors*) '(255 0 0)) @@ -106,7 +106,11 @@ (loop for tri in points collecting (rotate-triangle (make-array (length tri) :initial-contents tri) m))) (defparameter *ship-model* - (make-model-3pyramid *3pyramid-flat-points* -;(rotate-triangle (make-2d-array 4 3 *3pyramid-flat-points*) (make-array 3 :initial-contents '(0 90.0 0))) + (make-model-3pyramid ;*3pyramid-flat-points* + (rotate-triangle (make-2d-array 4 3 *3pyramid-flat-points*) (make-rotation-matrix 0 0 0)) :face-colors '((196 196 196) (196 196 196) (196 196 196) (32 32 32)))) -;'((0.0 -0.5 -1.5) (0.0 0.5 1.5) (-2.0 -0.5 1.5) (2.0 -0.5 1.5)) + +;(defparameter *ship-model* +; (make-model-3pyramid '((0.0 -0.5 -1.5) (0.0 0.5 1.5) (-2.0 -0.5 1.5) (2.0 -0.5 1.5)) +; :face-colors '((196 196 196) (196 196 196) (196 196 196) (32 32 32)))) +