Packed pos fixes

This commit is contained in:
luboslenco 2018-12-15 23:10:11 +01:00
parent 9c9fd0881e
commit 4bde0b11d8
2 changed files with 36 additions and 35 deletions

View file

@ -441,39 +441,53 @@ class RigidBody extends iron.Trait {
}
function fillConvexHull(shape:BtConvexHullShapePointer, scale:Vec4, margin:Float) {
var positions = cast(object, MeshObject).data.geom.positions;
var data = cast(object, MeshObject).data;
var positions = data.geom.positions;
var sx = scale.x * (1.0 - margin) * (1 / 32767);
var sy = scale.y * (1.0 - margin) * (1 / 32767);
var sz = scale.z * (1.0 - margin) * (1 / 32767);
if (data.raw.scale_pos != null) {
sx *= data.raw.scale_pos;
sy *= data.raw.scale_pos;
sz *= data.raw.scale_pos;
}
for (i in 0...Std.int(positions.length / 4)) {
vec1.setX(positions[i * 3] * sx);
vec1.setY(positions[i * 3 + 1] * sy);
vec1.setZ(positions[i * 3 + 2] * sz);
vec1.setX(positions[i * 4 ] * sx);
vec1.setY(positions[i * 4 + 1] * sy);
vec1.setZ(positions[i * 4 + 2] * sz);
shape.addPoint(vec1, true);
}
}
function fillTriangleMesh(triangleMesh:BtTriangleMeshPointer, scale:Vec4) {
var positions = cast(object, MeshObject).data.geom.positions;
var indices = cast(object, MeshObject).data.geom.indices;
var data = cast(object, MeshObject).data;
var positions = data.geom.positions;
var indices = data.geom.indices;
var sx = scale.x * (1 / 32767);
var sy = scale.y * (1 / 32767);
var sz = scale.z * (1 / 32767);
if (data.raw.scale_pos != null) {
sx *= data.raw.scale_pos;
sy *= data.raw.scale_pos;
sz *= data.raw.scale_pos;
}
for (ar in indices) {
for (i in 0...Std.int(ar.length / 3)) {
vec1.setX(positions[ar[i * 3 + 0] * 3 + 0] * sx);
vec1.setY(positions[ar[i * 3 + 0] * 3 + 1] * sy);
vec1.setZ(positions[ar[i * 3 + 0] * 3 + 2] * sz);
vec2.setX(positions[ar[i * 3 + 1] * 3 + 0] * sx);
vec2.setY(positions[ar[i * 3 + 1] * 3 + 1] * sy);
vec2.setZ(positions[ar[i * 3 + 1] * 3 + 2] * sz);
vec3.setX(positions[ar[i * 3 + 2] * 3 + 0] * sx);
vec3.setY(positions[ar[i * 3 + 2] * 3 + 1] * sy);
vec3.setZ(positions[ar[i * 3 + 2] * 3 + 2] * sz);
vec1.setX(positions[ar[i * 3 + 0] * 4 + 0] * sx);
vec1.setY(positions[ar[i * 3 + 0] * 4 + 1] * sy);
vec1.setZ(positions[ar[i * 3 + 0] * 4 + 2] * sz);
vec2.setX(positions[ar[i * 3 + 1] * 4 + 0] * sx);
vec2.setY(positions[ar[i * 3 + 1] * 4 + 1] * sy);
vec2.setZ(positions[ar[i * 3 + 1] * 4 + 2] * sz);
vec3.setX(positions[ar[i * 3 + 2] * 4 + 0] * sx);
vec3.setY(positions[ar[i * 3 + 2] * 4 + 1] * sy);
vec3.setZ(positions[ar[i * 3 + 2] * 4 + 2] * sz);
triangleMesh.addTriangle(vec1, vec2, vec3);
}
}

View file

@ -1448,26 +1448,13 @@ class ArmoryExporter:
cdata[i * 4 + 2] = np.int16(pow(vtx.col[2], 2.2) * 32767)
# Save aabb
aabb_min = [-0.01, -0.01, -0.01]
aabb_max = [0.01, 0.01, 0.01]
i = 0
while i < len(vdata):
if vdata[i] > aabb_max[0]:
aabb_max[0] = vdata[i]
if vdata[i + 1] > aabb_max[1]:
aabb_max[1] = vdata[i + 1]
if vdata[i + 2] > aabb_max[2]:
aabb_max[2] = vdata[i + 2]
if vdata[i] < aabb_min[0]:
aabb_min[0] = vdata[i]
if vdata[i + 1] < aabb_min[1]:
aabb_min[1] = vdata[i + 1]
if vdata[i + 2] < aabb_min[2]:
aabb_min[2] = vdata[i + 2]
i += 3
bobject.data.arm_aabb = [abs(aabb_min[0]) + abs(aabb_max[0]), abs(aabb_min[1]) + abs(aabb_max[1]), abs(aabb_min[2]) + abs(aabb_max[2])]
# Not axis-aligned
# arm_aabb = [bobject.matrix_world * Vector(v) for v in bobject.bound_box]
aabb_center = 0.125 * sum((Vector(b) for b in bobject.bound_box), Vector())
bobject.data.arm_aabb = [bobject.dimensions[0] / bobject.scale[0], \
bobject.dimensions[1] / bobject.scale[1], \
bobject.dimensions[2] / bobject.scale[2]]
bobject.data.arm_aabb[0] += abs(aabb_center[0]) * 2
bobject.data.arm_aabb[1] += abs(aabb_center[1]) * 2
bobject.data.arm_aabb[2] += abs(aabb_center[2]) * 2
# Scale for packed coords
maxdim = max(bobject.data.arm_aabb[0], max(bobject.data.arm_aabb[1], bobject.data.arm_aabb[2]))