From bfbcdfbae14185bbea882a9a94b8fc0c941c8045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9verin=20Lemaignan?= Date: Wed, 7 Nov 2012 14:36:23 +0100 Subject: [PATCH] [pyassimp] Fixed transformations in bounding box computation --- port/PyAssimp/pyassimp/helper.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/port/PyAssimp/pyassimp/helper.py b/port/PyAssimp/pyassimp/helper.py index a01da375c..6a6339d33 100644 --- a/port/PyAssimp/pyassimp/helper.py +++ b/port/PyAssimp/pyassimp/helper.py @@ -9,6 +9,7 @@ import ctypes from ctypes import POINTER import operator import numpy +from numpy import linalg import logging;logger = logging.getLogger("pyassimp") @@ -47,12 +48,14 @@ def transform(vector3, matrix4x4): def get_bounding_box(scene): bb_min = [1e10, 1e10, 1e10] # x,y,z bb_max = [-1e10, -1e10, -1e10] # x,y,z - return get_bounding_box_for_node(scene.rootnode, bb_min, bb_max) + return get_bounding_box_for_node(scene.rootnode, bb_min, bb_max, linalg.inv(scene.rootnode.transformation)) -def get_bounding_box_for_node(node, bb_min, bb_max): +def get_bounding_box_for_node(node, bb_min, bb_max, transformation): + + transformation = numpy.dot(transformation, node.transformation) for mesh in node.meshes: for v in mesh.vertices: - v = transform(v, node.transformation) + v = transform(v, transformation) bb_min[0] = min(bb_min[0], v[0]) bb_min[1] = min(bb_min[1], v[1]) bb_min[2] = min(bb_min[2], v[2]) @@ -62,7 +65,7 @@ def get_bounding_box_for_node(node, bb_min, bb_max): for child in node.children: - bb_min, bb_max = get_bounding_box_for_node(child, bb_min, bb_max) + bb_min, bb_max = get_bounding_box_for_node(child, bb_min, bb_max, transformation) return bb_min, bb_max