Skip to content

Commit

Permalink
reorder functions to remove a warning in sbcl
Browse files Browse the repository at this point in the history
SBCL couldnt validate the type usage in #'q:to-direction-vec4. I think
this was because of it's use of #'q:rotate-v4 which was defined later
in the file. This was somewhat confirmed by moving rotate-v4 before
to-direction-vec4 and the warning went away
  • Loading branch information
cbaggers committed Aug 31, 2019
1 parent 8cf5861 commit 29fc5b3
Showing 1 changed file with 53 additions and 51 deletions.
104 changes: 53 additions & 51 deletions quaternions/consing.lisp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(in-package #:rtg-math.quaternions)

;;----------------------------------------------------------------;;
;;----------------------------------------------------------------

(defn q! ((w single-float) (x single-float) (y single-float) (z single-float))
quaternion
Expand All @@ -22,6 +22,58 @@
(aref q 3) z)
q))

;;----------------------------------------------------------------

;; [TODO] Look into assets (this should be a unit quaternion
(defn rotate ((vec3 vec3) (quat quaternion)) vec3
(declare (optimize (speed 3) (safety 1) (debug 1)))
(let* ((v-mult (cl:* 2.0 (cl:+ (cl:* (x quat) (aref vec3 0))
(cl:* (y quat) (aref vec3 1))
(cl:* (z quat) (aref vec3 2)))))
(cross-mult (cl:* 2.0 (w quat)))
(p-mult (cl:- (cl:* cross-mult (w quat)) 1.0)))
(v3:make (cl:+ (cl:* p-mult (aref vec3 0))
(cl:* v-mult (x quat))
(cl:* cross-mult
(cl:- (cl:* (y quat) (aref vec3 2))
(cl:* (z quat) (aref vec3 1)))))
(cl:+ (cl:* p-mult (aref vec3 1))
(cl:* v-mult (y quat))
(cl:* cross-mult
(cl:- (cl:* (z quat) (aref vec3 0))
(cl:* (x quat) (aref vec3 2)))))
(cl:+ (cl:* p-mult (aref vec3 2))
(cl:* v-mult (z quat))
(cl:* cross-mult
(cl:- (cl:* (x quat) (aref vec3 1))
(cl:* (y quat) (aref vec3 0))))))))

(defn rotate-v4 ((vec4 vec4) (quat quaternion)) vec4
(declare (optimize (speed 3) (safety 1) (debug 1)))
(let* ((v-mult (cl:* 2.0 (cl:+ (cl:* (x quat) (aref vec4 0))
(cl:* (y quat) (aref vec4 1))
(cl:* (z quat) (aref vec4 2)))))
(cross-mult (cl:* 2.0 (w quat)))
(p-mult (cl:- (cl:* cross-mult (w quat)) 1.0)))
(v4:make (cl:+ (cl:* p-mult (aref vec4 0))
(cl:* v-mult (x quat))
(cl:* cross-mult
(cl:- (cl:* (y quat) (aref vec4 2))
(cl:* (z quat) (aref vec4 1)))))
(cl:+ (cl:* p-mult (aref vec4 1))
(cl:* v-mult (y quat))
(cl:* cross-mult
(cl:- (cl:* (z quat) (aref vec4 0))
(cl:* (x quat) (aref vec4 2)))))
(cl:+ (cl:* p-mult (aref vec4 2))
(cl:* v-mult (z quat))
(cl:* cross-mult
(cl:- (cl:* (x quat) (aref vec4 1))
(cl:* (y quat) (aref vec4 0)))))
(aref vec4 3))))

;;----------------------------------------------------------------;;

(defn-inline 0! () quaternion
(declare (optimize (speed 3) (safety 1) (debug 1)))
(make-array 4 :element-type 'single-float :initial-element 0f0))
Expand Down Expand Up @@ -289,56 +341,6 @@

;;----------------------------------------------------------------

;; [TODO] Look into assets (this should be a unit quaternion
(defn rotate ((vec3 vec3) (quat quaternion)) vec3
(declare (optimize (speed 3) (safety 1) (debug 1)))
(let* ((v-mult (cl:* 2.0 (cl:+ (cl:* (x quat) (aref vec3 0))
(cl:* (y quat) (aref vec3 1))
(cl:* (z quat) (aref vec3 2)))))
(cross-mult (cl:* 2.0 (w quat)))
(p-mult (cl:- (cl:* cross-mult (w quat)) 1.0)))
(v3:make (cl:+ (cl:* p-mult (aref vec3 0))
(cl:* v-mult (x quat))
(cl:* cross-mult
(cl:- (cl:* (y quat) (aref vec3 2))
(cl:* (z quat) (aref vec3 1)))))
(cl:+ (cl:* p-mult (aref vec3 1))
(cl:* v-mult (y quat))
(cl:* cross-mult
(cl:- (cl:* (z quat) (aref vec3 0))
(cl:* (x quat) (aref vec3 2)))))
(cl:+ (cl:* p-mult (aref vec3 2))
(cl:* v-mult (z quat))
(cl:* cross-mult
(cl:- (cl:* (x quat) (aref vec3 1))
(cl:* (y quat) (aref vec3 0))))))))

(defn rotate-v4 ((vec4 vec4) (quat quaternion)) vec4
(declare (optimize (speed 3) (safety 1) (debug 1)))
(let* ((v-mult (cl:* 2.0 (cl:+ (cl:* (x quat) (aref vec4 0))
(cl:* (y quat) (aref vec4 1))
(cl:* (z quat) (aref vec4 2)))))
(cross-mult (cl:* 2.0 (w quat)))
(p-mult (cl:- (cl:* cross-mult (w quat)) 1.0)))
(v4:make (cl:+ (cl:* p-mult (aref vec4 0))
(cl:* v-mult (x quat))
(cl:* cross-mult
(cl:- (cl:* (y quat) (aref vec4 2))
(cl:* (z quat) (aref vec4 1)))))
(cl:+ (cl:* p-mult (aref vec4 1))
(cl:* v-mult (y quat))
(cl:* cross-mult
(cl:- (cl:* (z quat) (aref vec4 0))
(cl:* (x quat) (aref vec4 2)))))
(cl:+ (cl:* p-mult (aref vec4 2))
(cl:* v-mult (z quat))
(cl:* cross-mult
(cl:- (cl:* (x quat) (aref vec4 1))
(cl:* (y quat) (aref vec4 0)))))
(aref vec4 3))))

;;----------------------------------------------------------------

(defn lerp ((start-quat quaternion) (end-quat quaternion) (pos single-float))
quaternion
(declare (optimize (speed 3) (safety 1) (debug 1)))
Expand Down

0 comments on commit 29fc5b3

Please sign in to comment.