[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54584] trunk/blender/source/blender/ collada: Fix: Collada Import files with X_UP and Y_UP axis where imported with wrong orientation

Gaia Clary gaia.clary at machinimatrix.org
Fri Feb 15 16:36:02 CET 2013


Revision: 54584
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54584
Author:   gaiaclary
Date:     2013-02-15 15:36:02 +0000 (Fri, 15 Feb 2013)
Log Message:
-----------
Fix: Collada Import files with X_UP and Y_UP axis where imported with wrong orientation

Modified Paths:
--------------
    trunk/blender/source/blender/collada/collada.cpp
    trunk/blender/source/blender/collada/collada.h
    trunk/blender/source/blender/collada/collada_internal.cpp
    trunk/blender/source/blender/collada/collada_internal.h
    trunk/blender/source/blender/collada/collada_utils.cpp

Modified: trunk/blender/source/blender/collada/collada.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada.cpp	2013-02-15 14:54:11 UTC (rev 54583)
+++ trunk/blender/source/blender/collada/collada.cpp	2013-02-15 15:36:02 UTC (rev 54584)
@@ -40,7 +40,6 @@
 
 /* make dummy file */
 #include "BLI_fileops.h"
-#include "BLI_path_util.h"
 #include "BLI_linklist.h"
 
 int collada_import(bContext *C,

Modified: trunk/blender/source/blender/collada/collada.h
===================================================================
--- trunk/blender/source/blender/collada/collada.h	2013-02-15 14:54:11 UTC (rev 54583)
+++ trunk/blender/source/blender/collada/collada.h	2013-02-15 15:36:02 UTC (rev 54584)
@@ -33,6 +33,7 @@
 #endif
 
 #include "BLI_linklist.h"
+#include "BLI_path_util.h"
 #include "RNA_types.h"
 
 typedef enum BC_export_mesh_type {

Modified: trunk/blender/source/blender/collada/collada_internal.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_internal.cpp	2013-02-15 14:54:11 UTC (rev 54583)
+++ trunk/blender/source/blender/collada/collada_internal.cpp	2013-02-15 15:36:02 UTC (rev 54584)
@@ -33,7 +33,14 @@
 
 UnitConverter::UnitConverter() : unit(), up_axis(COLLADAFW::FileInfo::Z_UP)
 {
-	/* pass */
+	unit_m4(x_up_mat4);
+	rotate_m4(x_up_mat4, 'Y', -0.5 * M_PI);
+
+	unit_m4(y_up_mat4);
+	rotate_m4(y_up_mat4, 'X', 0.5 * M_PI);
+
+	unit_m4(z_up_mat4);
+
 }
 
 void UnitConverter::read_asset(const COLLADAFW::FileInfo *asset)
@@ -102,6 +109,21 @@
 			out[i][j] = mat[i][j];
 }
 
+float(&UnitConverter::get_rotation())[4][4]
+{
+	switch(up_axis) {
+		case COLLADAFW::FileInfo::X_UP:
+			return x_up_mat4;
+			break;
+		case COLLADAFW::FileInfo::Y_UP:
+			return y_up_mat4;
+			break;
+		default:
+			return z_up_mat4;
+			break;
+	}
+}
+
 void TransformBase::decompose(float mat[4][4], float *loc, float eul[3], float quat[4], float *size)
 {
 	mat4_to_size(size, mat);

Modified: trunk/blender/source/blender/collada/collada_internal.h
===================================================================
--- trunk/blender/source/blender/collada/collada_internal.h	2013-02-15 14:54:11 UTC (rev 54583)
+++ trunk/blender/source/blender/collada/collada_internal.h	2013-02-15 15:36:02 UTC (rev 54584)
@@ -39,7 +39,6 @@
 #include "DNA_object_types.h"
 #include "DNA_scene_types.h"
 #include "BLI_math.h"
-#include "BLI_math.h"
 #include "BLI_linklist.h"
 
 class UnitConverter
@@ -48,6 +47,10 @@
 	COLLADAFW::FileInfo::Unit unit;
 	COLLADAFW::FileInfo::UpAxisType up_axis;
 
+	float x_up_mat4[4][4];
+	float y_up_mat4[4][4];
+	float z_up_mat4[4][4];
+
 public:
 
 	enum UnitSystem {
@@ -74,6 +77,10 @@
 	void mat4_to_dae(float out[4][4], float in[4][4]);
 
 	void mat4_to_dae_double(double out[4][4], float in[4][4]);
+
+	float(&get_rotation())[4][4];
+
+
 };
 
 class TransformBase

Modified: trunk/blender/source/blender/collada/collada_utils.cpp
===================================================================
--- trunk/blender/source/blender/collada/collada_utils.cpp	2013-02-15 14:54:11 UTC (rev 54583)
+++ trunk/blender/source/blender/collada/collada_utils.cpp	2013-02-15 15:36:02 UTC (rev 54584)
@@ -351,6 +351,10 @@
 	rescale[0] = rescale[1] = rescale[2] = scale_conv;
 
 	float size_mat4[4][4];
+
+	float axis_mat4[4][4];
+	unit_m4(axis_mat4);
+
 	size_to_mat4(size_mat4, rescale);
 
 	for (std::vector<Object *>::iterator it = objects_done->begin();
@@ -359,6 +363,7 @@
 	{
 		ob = *it;
 		mult_m4_m4m4(ob->obmat, size_mat4, ob->obmat);
+		mult_m4_m4m4(ob->obmat, bc_unit.get_rotation(), ob->obmat);
 		BKE_object_apply_mat4(ob, ob->obmat, 0, 0);
 	}
 




More information about the Bf-blender-cvs mailing list