[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33500] trunk/blender/source: bugfix [ #24995] Object rotation seems to be applied incorrectly

Campbell Barton ideasman42 at gmail.com
Mon Dec 6 08:45:08 CET 2010


Revision: 33500
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33500
Author:   campbellbarton
Date:     2010-12-06 08:45:07 +0100 (Mon, 06 Dec 2010)

Log Message:
-----------
bugfix [#24995] Object rotation seems to be applied incorrectly
- Object actuator rotation was being scaled by: (1/0.02)*2*PI/360 == 0.872, since revision 2. 
- Remove scaling and use do_versions to adjust existing files.

Revision Links:
--------------
    http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=2

Modified Paths:
--------------
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/makesdna/DNA_actuator_types.h
    trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2010-12-06 06:26:47 UTC (rev 33499)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2010-12-06 07:45:07 UTC (rev 33500)
@@ -11155,24 +11155,22 @@
 		}
 
 	/* put compatibility code here until next subversion bump */
-	{
+	if (main->versionfile < 255 || (main->versionfile == 255 && main->subversionfile < 1)) {
 		Brush *br;
+		ParticleSettings *part;
+		bScreen *sc;
+		Object *ob;
+
 		for(br= main->brush.first; br; br= br->id.next) {
 			if(br->ob_mode==0)
 				br->ob_mode= OB_MODE_ALL_PAINT;
 		}
-		
-	}
-	{
-		ParticleSettings *part;
+
 		for(part = main->particle.first; part; part = part->id.next) {
 			if(part->boids)
 				part->boids->pitch = 1.0f;
 		}
-	}
 
-	{
-		bScreen *sc;
 		for (sc= main->screen.first; sc; sc= sc->id.next) {
 			ScrArea *sa;
 			for (sa= sc->areabase.first; sa; sa= sa->next) {
@@ -11198,8 +11196,22 @@
 				}
 			}
 		}
+
+		/* fix rotation actuators for objects so they use real angles (radians)
+		 * since before blender went opensource this strange scalar was used: (1 / 0.02) * 2 * math.pi/360 */
+		for(ob= main->object.first; ob; ob= ob->id.next) {
+			bActuator *act= ob->actuators.first;
+			while(act) {
+				if (act->type==ACT_OBJECT) {
+					/* multiply velocity with 50 in old files */
+					bObjectActuator *oa= act->data;
+					mul_v3_fl(oa->drot, 0.8726646259971648f);
+				}
+				act= act->next;
+			}
+		}
 	}
-	
+
 	/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
 	/* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */
 

Modified: trunk/blender/source/blender/makesdna/DNA_actuator_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_actuator_types.h	2010-12-06 06:26:47 UTC (rev 33499)
+++ trunk/blender/source/blender/makesdna/DNA_actuator_types.h	2010-12-06 07:45:07 UTC (rev 33500)
@@ -112,7 +112,7 @@
 	short damping;
 	float forceloc[3], forcerot[3];
 	float pad[3], pad1[3];
-	float dloc[3], drot[3];
+	float dloc[3], drot[3]; /* angle in radians */
 	float linearvelocity[3], angularvelocity[3];
 	struct Object *reference;
 } bObjectActuator;

Modified: trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp	2010-12-06 06:26:47 UTC (rev 33499)
+++ trunk/blender/source/gameengine/Converter/KX_ConvertActuators.cpp	2010-12-06 07:45:07 UTC (rev 33500)
@@ -32,8 +32,6 @@
 #pragma warning (disable : 4786) 
 #endif //WIN32
 
-#define BLENDER_HACK_DTIME 0.02
-
 #include "MEM_guardedalloc.h"
 
 #include "KX_BlenderSceneConverter.h"
@@ -151,13 +149,6 @@
 					KX_BLENDERTRUNC(obact->angularvelocity[2]));
 				short damping = obact->damping;
 				
-				drotvec /=		BLENDER_HACK_DTIME;
-				//drotvec /=		BLENDER_HACK_DTIME;
-				drotvec *= MT_2_PI/360.0;
-				//dlocvec /= BLENDER_HACK_DTIME;
-				//linvelvec /=	BLENDER_HACK_DTIME;
-				//angvelvec /=	BLENDER_HACK_DTIME;
-				
 				/* Blender uses a bit vector internally for the local-flags. In */
 				/* KX, we have four bools. The compiler should be smart enough  */
 				/* to do the right thing. We need to explicitly convert here!   */





More information about the Bf-blender-cvs mailing list