|
|
|
@ -69,11 +69,11 @@ import com.jme3.scene.plugins.blender.objects.ObjectHelper; |
|
|
|
|
LOGGER.log(Level.WARNING, "Mirror modifier is invalid! Cannot be applied to: {0}", node.getName()); |
|
|
|
|
} else { |
|
|
|
|
int flag = ((Number) modifierData.get("flag")).intValue(); |
|
|
|
|
float[] mirrorFactor = new float[] { (flag & 0x08) != 0 ? -1.0f : 1.0f, (flag & 0x10) != 0 ? -1.0f : 1.0f, (flag & 0x20) != 0 ? -1.0f : 1.0f }; |
|
|
|
|
boolean[] isMirrored = new boolean[] { (flag & 0x08) != 0, (flag & 0x10) != 0, (flag & 0x20) != 0 }; |
|
|
|
|
if (blenderContext.getBlenderKey().isFixUpAxis()) { |
|
|
|
|
float temp = mirrorFactor[1]; |
|
|
|
|
mirrorFactor[1] = mirrorFactor[2]; |
|
|
|
|
mirrorFactor[2] = temp; |
|
|
|
|
boolean temp = isMirrored[1]; |
|
|
|
|
isMirrored[1] = isMirrored[2]; |
|
|
|
|
isMirrored[2] = temp; |
|
|
|
|
} |
|
|
|
|
float[] center = new float[] { 0.0f, 0.0f, 0.0f }; |
|
|
|
|
Pointer pObject = (Pointer) modifierData.get("mirrorob"); |
|
|
|
@ -101,7 +101,7 @@ import com.jme3.scene.plugins.blender.objects.ObjectHelper; |
|
|
|
|
Set<Integer> modifiedIndexes = new HashSet<Integer>(); |
|
|
|
|
List<Geometry> geometriesToAdd = new ArrayList<Geometry>(); |
|
|
|
|
for (int mirrorIndex = 0; mirrorIndex < 3; ++mirrorIndex) { |
|
|
|
|
if (mirrorFactor[mirrorIndex] == -1.0f) { |
|
|
|
|
if (isMirrored[mirrorIndex]) { |
|
|
|
|
for (Spatial spatial : node.getChildren()) { |
|
|
|
|
if (spatial instanceof Geometry) { |
|
|
|
|
Mesh mesh = ((Geometry) spatial).getMesh(); |
|
|
|
@ -135,15 +135,21 @@ import com.jme3.scene.plugins.blender.objects.ObjectHelper; |
|
|
|
|
if (bindPosePosition != null) { |
|
|
|
|
bindPosePosition.put(valueIndex, center[mirrorIndex]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cloneNormals.put(valueIndex, 0); |
|
|
|
|
if (cloneBindPoseNormals != null) { |
|
|
|
|
cloneBindPoseNormals.put(valueIndex, 0); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
clonePosition.put(valueIndex, value + 2.0f * d); |
|
|
|
|
if (cloneBindPosePosition != null) { |
|
|
|
|
cloneBindPosePosition.put(valueIndex, value + 2.0f * d); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
cloneNormals.put(valueIndex, -cloneNormals.get(valueIndex)); |
|
|
|
|
if (cloneBindPoseNormals != null) { |
|
|
|
|
cloneBindPoseNormals.put(valueIndex, -cloneNormals.get(valueIndex)); |
|
|
|
|
|
|
|
|
|
cloneNormals.put(valueIndex, -cloneNormals.get(valueIndex)); |
|
|
|
|
if (cloneBindPoseNormals != null) { |
|
|
|
|
cloneBindPoseNormals.put(valueIndex, -cloneNormals.get(valueIndex)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|