diff options
author | Tavian Barnes <tavianator@gmail.com> | 2011-06-14 08:37:55 -0600 |
---|---|---|
committer | Tavian Barnes <tavianator@gmail.com> | 2011-06-14 08:37:55 -0600 |
commit | 9ed4a01ac4305baff9e5ee1484691e78def105a1 (patch) | |
tree | a8b5c556baf7053546e188e42278c6b88c7b0543 /libdimension-python | |
parent | 9b758508df283a533a4cfc605545a35f77bc9d5f (diff) | |
download | dimension-9ed4a01ac4305baff9e5ee1484691e78def105a1.tar.xz |
Fix rotational alignment.
Diffstat (limited to 'libdimension-python')
-rw-r--r-- | libdimension-python/dimension.pxd | 5 | ||||
-rw-r--r-- | libdimension-python/dimension.pyx | 24 | ||||
-rwxr-xr-x | libdimension-python/tests/demo.py | 8 |
3 files changed, 12 insertions, 25 deletions
diff --git a/libdimension-python/dimension.pxd b/libdimension-python/dimension.pxd index cd28f24..22e9764 100644 --- a/libdimension-python/dimension.pxd +++ b/libdimension-python/dimension.pxd @@ -91,9 +91,6 @@ cdef extern from "../libdimension/dimension.h": double dmnsn_vector_norm(dmnsn_vector v) dmnsn_vector dmnsn_vector_normalized(dmnsn_vector v) - double dmnsn_vector_axis_angle(dmnsn_vector v1, dmnsn_vector v2, - dmnsn_vector axis) - dmnsn_vector dmnsn_zero dmnsn_vector dmnsn_x dmnsn_vector dmnsn_y @@ -114,6 +111,8 @@ cdef extern from "../libdimension/dimension.h": dmnsn_matrix dmnsn_scale_matrix(dmnsn_vector s) dmnsn_matrix dmnsn_translation_matrix(dmnsn_vector d) dmnsn_matrix dmnsn_rotation_matrix(dmnsn_vector theta) + dmnsn_matrix dmnsn_alignment_matrix(dmnsn_vector frm, dmnsn_vector to, + dmnsn_vector axis1, dmnsn_vector axis2) ########## # Colors # diff --git a/libdimension-python/dimension.pyx b/libdimension-python/dimension.pyx index 9a5fd80..54b7e66 100644 --- a/libdimension-python/dimension.pyx +++ b/libdimension-python/dimension.pyx @@ -643,11 +643,7 @@ cdef class Cone(Object): cdef Matrix trans = translate(Y) trans = scale(1.0, dir.norm()/2, 1.0)*trans - - cdef double thetaX = dmnsn_vector_axis_angle(dmnsn_y, dir._v, dmnsn_x) - cdef double thetaZ = dmnsn_vector_axis_angle(dmnsn_y, dir._v, dmnsn_z) - trans = _rawRotate(thetaX*X)*_rawRotate(thetaZ*Z)*trans - + trans = _rawMatrix(dmnsn_alignment_matrix(dmnsn_y, dir._v, dmnsn_x, dmnsn_z))*trans trans = translate(bottom)*trans self._intrinsicTransform(trans) @@ -786,22 +782,14 @@ cdef class PerspectiveCamera(Camera): cdef Vector vsky = Vector(sky) # Line up the top of the viewport with the sky vector - cdef double thetaSkyX = dmnsn_vector_axis_angle(dmnsn_y, vsky._v, dmnsn_x) - cdef double thetaSkyZ = dmnsn_vector_axis_angle(dmnsn_y, vsky._v, dmnsn_z) - cdef Matrix alignSky = _rawRotate(thetaSkyX*X)*_rawRotate(thetaSkyZ*Z) - self.transform(alignSky) - cdef Vector right = alignSky*X + cdef Matrix alignSky = _rawMatrix(dmnsn_alignment_matrix(dmnsn_y, vsky._v, + dmnsn_z, dmnsn_x)) cdef Vector forward = alignSky*Z + cdef Vector right = alignSky*X # Line up the look at point with lookAt - cdef double thetaLookAtSky = dmnsn_vector_axis_angle( - forward._v, dir._v, vsky._v - ) - cdef double thetaLookAtRight = dmnsn_vector_axis_angle( - forward._v, dir._v, right._v - ) - self.transform(_rawRotate(thetaLookAtSky*vsky)) - self.transform(_rawRotate(thetaLookAtRight*right)) + self.transform(_rawMatrix(dmnsn_alignment_matrix(forward._v, dir._v, + vsky._v, right._v))) # Move the camera into position self.transform(translate(Vector(location))) diff --git a/libdimension-python/tests/demo.py b/libdimension-python/tests/demo.py index 4b68114..c024812 100755 --- a/libdimension-python/tests/demo.py +++ b/libdimension-python/tests/demo.py @@ -153,10 +153,10 @@ skySphere = SkySphere( ) # Scene -scene = Scene(canvas = canvas, - objects = objects, - lights = lights, - camera = camera) +scene = Scene(canvas = canvas, + objects = objects, + lights = lights, + camera = camera) scene.defaultTexture = Texture(finish = Ambient(0.1) + Diffuse(0.6)) scene.background = Clear scene.skySphere = skySphere |