[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [15291] trunk/blender/source: * Documented that get/setOrientation use an inverted rotation matrix

Campbell Barton ideasman42 at gmail.com
Fri Jun 20 22:55:18 CEST 2008


Revision: 15291
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15291
Author:   campbellbarton
Date:     2008-06-20 22:54:29 +0200 (Fri, 20 Jun 2008)

Log Message:
-----------
* Documented that get/setOrientation use an inverted rotation matrix
* OB prefix is needed when specifying the object for the Message Actuator, this is very bad since other object fields in the BGE dont need this prefix - a real fix would need do_versions to keep old files running.
* RotationMatrix was all nans if the rotation vector axis was 0,0,0, Changed so in this case just return a matrix that doesn't rotate anything,

spent some angry hours to find these issues, maybe this will save others the hassle ;)

Modified Paths:
--------------
    trunk/blender/source/blender/python/api2_2x/Mathutils.c
    trunk/blender/source/blender/src/buttons_logic.c
    trunk/blender/source/gameengine/PyDoc/KX_GameObject.py

Modified: trunk/blender/source/blender/python/api2_2x/Mathutils.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Mathutils.c	2008-06-20 19:24:55 UTC (rev 15290)
+++ trunk/blender/source/blender/python/api2_2x/Mathutils.c	2008-06-20 20:54:29 UTC (rev 15291)
@@ -725,28 +725,33 @@
 		vec->vec[0] /= norm;
 		vec->vec[1] /= norm;
 		vec->vec[2] /= norm;
-
-		//create matrix
-		cosAngle = (float) cos(angle);
-		sinAngle = (float) sin(angle);
-		mat[0] = ((vec->vec[0] * vec->vec[0]) * (1 - cosAngle)) +
-			cosAngle;
-		mat[1] = ((vec->vec[0] * vec->vec[1]) * (1 - cosAngle)) +
-			(vec->vec[2] * sinAngle);
-		mat[2] = ((vec->vec[0] * vec->vec[2]) * (1 - cosAngle)) -
-			(vec->vec[1] * sinAngle);
-		mat[3] = ((vec->vec[0] * vec->vec[1]) * (1 - cosAngle)) -
-			(vec->vec[2] * sinAngle);
-		mat[4] = ((vec->vec[1] * vec->vec[1]) * (1 - cosAngle)) +
-			cosAngle;
-		mat[5] = ((vec->vec[1] * vec->vec[2]) * (1 - cosAngle)) +
-			(vec->vec[0] * sinAngle);
-		mat[6] = ((vec->vec[0] * vec->vec[2]) * (1 - cosAngle)) +
-			(vec->vec[1] * sinAngle);
-		mat[7] = ((vec->vec[1] * vec->vec[2]) * (1 - cosAngle)) -
-			(vec->vec[0] * sinAngle);
-		mat[8] = ((vec->vec[2] * vec->vec[2]) * (1 - cosAngle)) +
-			cosAngle;
+		
+		if (isnan(vec->vec[0]) || isnan(vec->vec[1]) || isnan(vec->vec[2])) {
+			/* zero length vector, return an identity matrix, could also return an error */
+			mat[0]= mat[4] = mat[8] = 1.0f;
+		} else {	
+			/* create matrix */
+			cosAngle = (float) cos(angle);
+			sinAngle = (float) sin(angle);
+			mat[0] = ((vec->vec[0] * vec->vec[0]) * (1 - cosAngle)) +
+				cosAngle;
+			mat[1] = ((vec->vec[0] * vec->vec[1]) * (1 - cosAngle)) +
+				(vec->vec[2] * sinAngle);
+			mat[2] = ((vec->vec[0] * vec->vec[2]) * (1 - cosAngle)) -
+				(vec->vec[1] * sinAngle);
+			mat[3] = ((vec->vec[0] * vec->vec[1]) * (1 - cosAngle)) -
+				(vec->vec[2] * sinAngle);
+			mat[4] = ((vec->vec[1] * vec->vec[1]) * (1 - cosAngle)) +
+				cosAngle;
+			mat[5] = ((vec->vec[1] * vec->vec[2]) * (1 - cosAngle)) +
+				(vec->vec[0] * sinAngle);
+			mat[6] = ((vec->vec[0] * vec->vec[2]) * (1 - cosAngle)) +
+				(vec->vec[1] * sinAngle);
+			mat[7] = ((vec->vec[1] * vec->vec[2]) * (1 - cosAngle)) -
+				(vec->vec[0] * sinAngle);
+			mat[8] = ((vec->vec[2] * vec->vec[2]) * (1 - cosAngle)) +
+				cosAngle;
+		}
 	} else {
 		return EXPP_ReturnPyObjError(PyExc_AttributeError,
 			"Mathutils.RotationMatrix(): unrecognizable axis of rotation type - expected x,y,z or r\n");

Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c	2008-06-20 19:24:55 UTC (rev 15290)
+++ trunk/blender/source/blender/src/buttons_logic.c	2008-06-20 20:54:29 UTC (rev 15291)
@@ -2149,7 +2149,7 @@
 		uiDefBut(block, TEX, 1, "To: ",
 			(xco+10), (yco-(myline++*24)), (width-20), 19,
 			&ma->toPropName, 0, 31, 0, 0,
-			"Optional send message to objects with this name only"
+			"Optional send message to objects with this name only (Prefix name with OB)"
 			", or empty to broadcast");
 
 #endif

Modified: trunk/blender/source/gameengine/PyDoc/KX_GameObject.py
===================================================================
--- trunk/blender/source/gameengine/PyDoc/KX_GameObject.py	2008-06-20 19:24:55 UTC (rev 15290)
+++ trunk/blender/source/gameengine/PyDoc/KX_GameObject.py	2008-06-20 20:54:29 UTC (rev 15291)
@@ -50,7 +50,7 @@
 		"""
 		Sets the game object's orientation.
 		
-		@type orn: 3x3 rotation matrix, or Quaternion.
+		@type orn: 3x3 inverted rotation matrix, or Quaternion.
 		@param orn: a rotation matrix specifying the new rotation.
 		"""
 	def alignAxisToVect(vect, axis):
@@ -69,7 +69,7 @@
 		"""
 		Gets the game object's orientation.
 		
-		@rtype: 3x3 rotation matrix
+		@rtype: 3x3 inverted rotation matrix
 		@return: The game object's rotation matrix
 		"""
 	def getLinearVelocity(local):





More information about the Bf-blender-cvs mailing list