Before animateSkin() ever gets called, I get the following bounding box: -0.328329, 0.343511, -0.159473, 0.230658, 0.00242225, 2.12075.
Afterwards, it becomes: -9.9999998E10, 9.9999998E10, -9.9999998E10, 9.9999998E10, -9.9999998E10, 9.9999998E10
The following is the method with which I print the world-space bounding box:
public float[] getWorldSpaceBounds(Object3D obj) {
float[] objectSpaceBounds = obj.getMesh().getBoundingBox();
SimpleVector mins = new SimpleVector(objectSpaceBounds[0], objectSpaceBounds[2], objectSpaceBounds[4]);
SimpleVector maxs = new SimpleVector(objectSpaceBounds[1], objectSpaceBounds[3], objectSpaceBounds[5]);
SimpleVector[] p = new SimpleVector[8];
p[0] = new SimpleVector(mins.x, mins.y, maxs.z);
p[1] = new SimpleVector(mins.x, mins.y, mins.z);
p[2] = new SimpleVector(maxs.x, mins.y, mins.z);
p[3] = new SimpleVector(maxs.x, mins.y, maxs.z);
p[4] = new SimpleVector(maxs.x, maxs.y, mins.z);
p[5] = new SimpleVector(maxs.x, maxs.y, maxs.z);
p[6] = new SimpleVector(mins.x, maxs.y, mins.z);
p[7] = new SimpleVector(mins.x, maxs.y, maxs.z);
float minX = Float.MAX_VALUE;
float minY = Float.MAX_VALUE;
float minZ = Float.MAX_VALUE;
float maxX = -Float.MAX_VALUE;
float maxY = -Float.MAX_VALUE;
float maxZ = -Float.MAX_VALUE;
for (int i = 0; i < 8; i++) {
p[i].matMul(obj.getWorldTransformation());
if (p[i].x < minX) { minX = p[i].x; }
if (p[i].y < minY) { minY = p[i].y; }
if (p[i].z < minZ) { minZ = p[i].z; }
if (p[i].x > maxX) { maxX = p[i].x; }
if (p[i].y > maxY) { maxY = p[i].y; }
if (p[i].z > maxZ) { maxZ = p[i].z; }
}
float[] worldSpaceBounds = new float[6];
worldSpaceBounds[0] = minX;
worldSpaceBounds[1] = maxX;
worldSpaceBounds[2] = minY;
worldSpaceBounds[3] = maxY;
worldSpaceBounds[4] = minZ;
worldSpaceBounds[5] = maxZ;
return worldSpaceBounds;
}