From 88584ea76cf6ef18e465bda400d17083728dee53 Mon Sep 17 00:00:00 2001 From: "Kae..pl" Date: Mon, 20 Jun 2011 09:21:56 +0000 Subject: [PATCH] Full support for loading mirror modifier added. git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7678 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../blender/helpers/v249/ModifierHelper.java | 24 +++++++++++++----- .../test-data/Blender/2.4x/modifiers.blend | Bin 203608 -> 239520 bytes 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/ModifierHelper.java b/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/ModifierHelper.java index 6fc6994c8..c63d6c2d9 100644 --- a/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/ModifierHelper.java +++ b/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/ModifierHelper.java @@ -32,6 +32,7 @@ package com.jme3.scene.plugins.blender.helpers.v249; import java.nio.FloatBuffer; +import java.nio.ShortBuffer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -551,13 +552,14 @@ public class ModifierHelper extends AbstractBlenderHelper { Mesh clone = mesh.deepClone(); // getting buffers - FloatBuffer position = (FloatBuffer) mesh.getBuffer(Type.Position).getData(); - FloatBuffer bindPosePosition = (FloatBuffer) mesh.getBuffer(Type.BindPosePosition).getData(); - - FloatBuffer clonePosition = (FloatBuffer) clone.getBuffer(Type.Position).getData(); - FloatBuffer cloneBindPosePosition = (FloatBuffer) clone.getBuffer(Type.BindPosePosition).getData(); - FloatBuffer cloneNormals = (FloatBuffer) clone.getBuffer(Type.Normal).getData(); - FloatBuffer cloneBindPoseNormals = (FloatBuffer) clone.getBuffer(Type.BindPoseNormal).getData(); + FloatBuffer position = mesh.getFloatBuffer(Type.Position); + FloatBuffer bindPosePosition = mesh.getFloatBuffer(Type.BindPosePosition); + + FloatBuffer clonePosition = clone.getFloatBuffer(Type.Position); + FloatBuffer cloneBindPosePosition = clone.getFloatBuffer(Type.BindPosePosition); + FloatBuffer cloneNormals = clone.getFloatBuffer(Type.Normal); + FloatBuffer cloneBindPoseNormals = clone.getFloatBuffer(Type.BindPoseNormal); + ShortBuffer cloneIndexes = (ShortBuffer) clone.getBuffer(Type.Index).getData(); // modyfying data for (int i = mirrorIndex; i < clonePosition.limit(); i += 3) { @@ -575,6 +577,14 @@ public class ModifierHelper extends AbstractBlenderHelper { } cloneNormals.put(i, -cloneNormals.get(i)); cloneBindPoseNormals.put(i, -cloneNormals.get(i)); + + //modifying clone indexes + int vertexIndex = (i - mirrorIndex) / 3; + if(vertexIndex % 3 == 0) { + short index = cloneIndexes.get(vertexIndex + 2); + cloneIndexes.put(vertexIndex + 2, cloneIndexes.get(vertexIndex + 1)); + cloneIndexes.put(vertexIndex + 1, index); + } } if(mirrorU) { diff --git a/engine/src/test-data/Blender/2.4x/modifiers.blend b/engine/src/test-data/Blender/2.4x/modifiers.blend index 52403dbafff2a56ed1d4781b58c7cc5962db0ed2..0f1269cecac879acc7fd6f9c00399172a9d43e85 100644 GIT binary patch delta 32703 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 delta 17659 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