[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53096] trunk/blender/source: Fix #33487: game engine did not convert objects with rotation modes other than
Brecht Van Lommel
brechtvanlommel at pandora.be
Mon Dec 17 22:40:29 CET 2012
Revision: 53096
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53096
Author: blendix
Date: 2012-12-17 21:40:28 +0000 (Mon, 17 Dec 2012)
Log Message:
-----------
Fix #33487: game engine did not convert objects with rotation modes other than
Euler XYZ correctly, was never implemented;
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_object.h
trunk/blender/source/blender/blenkernel/intern/object.c
trunk/blender/source/blender/editors/object/object_transform.c
trunk/blender/source/blender/editors/space_clip/tracking_ops.c
trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
Modified: trunk/blender/source/blender/blenkernel/BKE_object.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_object.h 2012-12-17 20:37:10 UTC (rev 53095)
+++ trunk/blender/source/blender/blenkernel/BKE_object.h 2012-12-17 21:40:28 UTC (rev 53096)
@@ -89,7 +89,7 @@
int BKE_object_obdata_is_libdata(struct Object *ob);
void BKE_object_scale_to_mat3(struct Object *ob, float mat[3][3]);
-void BKE_object_rot_to_mat3(struct Object *ob, float mat[3][3]);
+void BKE_object_rot_to_mat3(struct Object *ob, float mat[3][3], short use_drot);
void BKE_object_mat3_to_rot(struct Object *ob, float mat[3][3], short use_compat);
void BKE_object_to_mat3(struct Object *ob, float mat[3][3]);
void BKE_object_to_mat4(struct Object *ob, float mat[4][4]);
Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c 2012-12-17 20:37:10 UTC (rev 53095)
+++ trunk/blender/source/blender/blenkernel/intern/object.c 2012-12-17 21:40:28 UTC (rev 53096)
@@ -1539,7 +1539,7 @@
size_to_mat3(mat, vec);
}
-void BKE_object_rot_to_mat3(Object *ob, float mat[3][3])
+void BKE_object_rot_to_mat3(Object *ob, float mat[3][3], short use_drot)
{
float rmat[3][3], dmat[3][3];
@@ -1570,7 +1570,10 @@
}
/* combine these rotations */
- mul_m3_m3m3(mat, dmat, rmat);
+ if(use_drot)
+ mul_m3_m3m3(mat, dmat, rmat);
+ else
+ copy_m3_m3(mat, rmat);
}
void BKE_object_mat3_to_rot(Object *ob, float mat[3][3], short use_compat)
@@ -1715,7 +1718,7 @@
BKE_object_scale_to_mat3(ob, smat);
/* rot */
- BKE_object_rot_to_mat3(ob, rmat);
+ BKE_object_rot_to_mat3(ob, rmat, TRUE);
mul_m3_m3m3(mat, rmat, smat);
}
Modified: trunk/blender/source/blender/editors/object/object_transform.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_transform.c 2012-12-17 20:37:10 UTC (rev 53095)
+++ trunk/blender/source/blender/editors/object/object_transform.c 2012-12-17 21:40:28 UTC (rev 53096)
@@ -447,7 +447,7 @@
float tmat[3][3], timat[3][3];
/* simple rotation matrix */
- BKE_object_rot_to_mat3(ob, rsmat);
+ BKE_object_rot_to_mat3(ob, rsmat, TRUE);
/* correct for scale, note mul_m3_m3m3 has swapped args! */
BKE_object_scale_to_mat3(ob, tmat);
Modified: trunk/blender/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_clip/tracking_ops.c 2012-12-17 20:37:10 UTC (rev 53095)
+++ trunk/blender/source/blender/editors/space_clip/tracking_ops.c 2012-12-17 21:40:28 UTC (rev 53096)
@@ -2025,7 +2025,7 @@
if (!flip) {
float lmat[4][4], ilmat[4][4], rmat[3][3];
- BKE_object_rot_to_mat3(ob, rmat);
+ BKE_object_rot_to_mat3(ob, rmat, TRUE);
invert_m3(rmat);
mul_m4_m4m3(mat, mat, rmat);
Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2012-12-17 20:37:10 UTC (rev 53095)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2012-12-17 21:40:28 UTC (rev 53096)
@@ -2187,26 +2187,37 @@
blenderobject->loc[1]+blenderobject->dloc[1],
blenderobject->loc[2]+blenderobject->dloc[2]
);
- MT_Vector3 eulxyz(blenderobject->rot);
+
+ MT_Matrix3x3 rotation;
+ float rotmat[3][3];
+ BKE_object_rot_to_mat3(blenderobject, rotmat, FALSE);
+ rotation.setValue3x3((float*)rotmat);
+
MT_Vector3 scale(blenderobject->size);
+
if (converter->addInitFromFrame) {//rcruiz
- float eulxyzPrev[3];
blenderscene->r.cfra=blenderscene->r.sfra-1;
//XXX update_for_newframe();
MT_Vector3 tmp=pos-MT_Point3(blenderobject->loc[0]+blenderobject->dloc[0],
blenderobject->loc[1]+blenderobject->dloc[1],
blenderobject->loc[2]+blenderobject->dloc[2]
);
- eulxyzPrev[0]=blenderobject->rot[0];
- eulxyzPrev[1]=blenderobject->rot[1];
- eulxyzPrev[2]=blenderobject->rot[2];
+ float rotmatPrev[3][3];
+ BKE_object_rot_to_mat3(blenderobject, rotmatPrev, FALSE);
+
+ float eulxyz[3], eulxyzPrev[3];
+ mat3_to_eul(eulxyz, rotmat);
+ mat3_to_eul(eulxyzPrev, rotmatPrev);
+
double fps = (double) blenderscene->r.frs_sec/
(double) blenderscene->r.frs_sec_base;
tmp.scale(fps, fps, fps);
inivel.push_back(tmp);
- tmp=eulxyz-eulxyzPrev;
+ tmp[0]=eulxyz[0]-eulxyzPrev[0];
+ tmp[1]=eulxyz[1]-eulxyzPrev[1];
+ tmp[2]=eulxyz[2]-eulxyzPrev[2];
tmp.scale(fps, fps, fps);
iniang.push_back(tmp);
blenderscene->r.cfra=blenderscene->r.sfra;
@@ -2214,7 +2225,7 @@
}
gameobj->NodeSetLocalPosition(pos);
- gameobj->NodeSetLocalOrientation(MT_Matrix3x3(eulxyz));
+ gameobj->NodeSetLocalOrientation(rotation);
gameobj->NodeSetLocalScale(scale);
gameobj->NodeUpdateGS(0);
More information about the Bf-blender-cvs
mailing list