[pyassimp] Apply post-processing on ctypes ASSIMP structure
- bind meshes to their materials - add transformations to cameraspull/8/merge^2
parent
511f80d047
commit
4e9214c624
|
@ -205,6 +205,7 @@ def pythonize_assimp(type, obj, scene):
|
||||||
|
|
||||||
Supported operations:
|
Supported operations:
|
||||||
- MESH: replace a list of mesh IDs by reference to these meshes
|
- MESH: replace a list of mesh IDs by reference to these meshes
|
||||||
|
- ADDTRANSFORMATION: add a reference to an object's transformation taken from their associated node.
|
||||||
|
|
||||||
:param type: the type of modification to operate (cf above)
|
:param type: the type of modification to operate (cf above)
|
||||||
:param obj: the input object to modify
|
:param obj: the input object to modify
|
||||||
|
@ -217,6 +218,19 @@ def pythonize_assimp(type, obj, scene):
|
||||||
meshes.append(scene.meshes[i])
|
meshes.append(scene.meshes[i])
|
||||||
return meshes
|
return meshes
|
||||||
|
|
||||||
|
if type == "ADDTRANSFORMATION":
|
||||||
|
|
||||||
|
def getnode(node, name):
|
||||||
|
if node.name == name: return node
|
||||||
|
for child in node.children:
|
||||||
|
n = getnode(child, name)
|
||||||
|
if n: return n
|
||||||
|
|
||||||
|
node = getnode(scene.rootnode, obj.name)
|
||||||
|
if not node:
|
||||||
|
raise AssimpError("Object " + str(obj) + " has no associated node!")
|
||||||
|
setattr(obj, "transformation", node.transformation)
|
||||||
|
|
||||||
|
|
||||||
def recur_pythonize(node, scene):
|
def recur_pythonize(node, scene):
|
||||||
""" Recursively call pythonize_assimp on
|
""" Recursively call pythonize_assimp on
|
||||||
|
@ -226,6 +240,15 @@ def recur_pythonize(node, scene):
|
||||||
|
|
||||||
node.meshes = pythonize_assimp("MESH", node.meshes, scene)
|
node.meshes = pythonize_assimp("MESH", node.meshes, scene)
|
||||||
|
|
||||||
|
for mesh in node.meshes:
|
||||||
|
mesh.material = scene.materials[mesh.materialindex]
|
||||||
|
|
||||||
|
for cam in scene.cameras:
|
||||||
|
pythonize_assimp("ADDTRANSFORMATION", cam, scene)
|
||||||
|
|
||||||
|
#for light in scene.lights:
|
||||||
|
# pythonize_assimp("ADDTRANSFORMATION", light, scene)
|
||||||
|
|
||||||
for c in node.children:
|
for c in node.children:
|
||||||
recur_pythonize(c, scene)
|
recur_pythonize(c, scene)
|
||||||
|
|
||||||
|
@ -293,9 +316,9 @@ def _finalize_mesh(mesh, target):
|
||||||
data = []
|
data = []
|
||||||
for index, mSubAttr in enumerate(mAttr):
|
for index, mSubAttr in enumerate(mAttr):
|
||||||
if mSubAttr:
|
if mSubAttr:
|
||||||
data.append([make_tuple(getattr(mesh, name)[index][i]) for i in xrange(nb_vertices)], dtype=numpy.float32)
|
data.append([make_tuple(getattr(mesh, name)[index][i]) for i in xrange(nb_vertices)])
|
||||||
|
|
||||||
setattr(target, name[1:].lower(), numpy.array(data))
|
setattr(target, name[1:].lower(), numpy.array(data, dtype=numpy.float32))
|
||||||
|
|
||||||
fill("mNormals")
|
fill("mNormals")
|
||||||
fill("mTangents")
|
fill("mTangents")
|
||||||
|
|
Loading…
Reference in New Issue