* 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 ;)
This commit is contained in:
parent
de7619991c
commit
a1e78a0cca
|
@ -725,28 +725,33 @@ PyObject *M_Mathutils_RotationMatrix(PyObject * self, PyObject * args)
|
|||
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");
|
||||
|
|
|
@ -2149,7 +2149,7 @@ static short draw_actuatorbuttons(bActuator *act, uiBlock *block, short xco, sho
|
|||
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
|
||||
|
|
|
@ -50,7 +50,7 @@ class KX_GameObject:
|
|||
"""
|
||||
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 @@ class KX_GameObject:
|
|||
"""
|
||||
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):
|
||||
|
|
Loading…
Reference in New Issue