Packed pos fixes
This commit is contained in:
parent
9c9fd0881e
commit
4bde0b11d8
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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]))
|
||||
|
|
Loading…
Reference in a new issue