OSDN Git Service

Enable interleave.
authorKazuhiko Kobayashi <chototsu_moushinp@yahoo.co.jp>
Sun, 12 Aug 2012 13:39:24 +0000 (22:39 +0900)
committerKazuhiko Kobayashi <chototsu_moushinp@yahoo.co.jp>
Sun, 12 Aug 2012 13:39:24 +0000 (22:39 +0900)
Fix a bug when accuracy < 0
Fix a problem when the model desn't contain physics data.

src/projectkyoto/jme3/mmd/PMDLoaderGLSLSkinning2.java
src/projectkyoto/jme3/mmd/nativebullet/PMDPhysicsWorld.java
src/projectkyoto/jme3/mmd/vmd/VMDControl.java
src/projectkyoto/mmd/file/PMDModel.java

index 0c4bf40..69cf5d4 100755 (executable)
@@ -168,7 +168,7 @@ public class PMDLoaderGLSLSkinning2 implements AssetLoader{
             node.pmdGeometryArray[pmdGeometryIndex++] = geom;
             meshConverter.getMeshDataList().set(i, null);
 //            go.add(mesh);
-//            mesh.setInterleaved();    
+            mesh.setInterleaved();    
         }
 //        go.optimize3();
         createSkinCommonVertData();
index 0802971..d329b8d 100755 (executable)
@@ -60,6 +60,7 @@ import projectkyoto.mmd.file.PMDModel;
  * @author kobayasi
  */
 public class PMDPhysicsWorld {
+    int maxSteps = 10;
     // bullet physics
     static final Object lockObject = new Object();
     PhysicsSpace physicsSpace;
@@ -503,7 +504,7 @@ public class PMDPhysicsWorld {
 //            applyResultToBone();
 //        }
 //        synchronized(lockObject) {
-            physicsSpace.update(timeStep, 100);
+            physicsSpace.update(timeStep, maxSteps);
 //        }
 //        applyResultToBone();
     }
@@ -618,4 +619,13 @@ public class PMDPhysicsWorld {
         return physicsSpace;
     }
 
+    public int getMaxSteps() {
+        return maxSteps;
+    }
+
+    public void setMaxSteps(int maxSteps) {
+        this.maxSteps = maxSteps;
+    }
+    
+
 }
index 7dec0a3..6ba1517 100755 (executable)
@@ -276,12 +276,19 @@ public class VMDControl extends AbstractControl {
             return;
         }
         float time = currentTime + tpf;
-        if (accuracy > 0 && tpf < 1f) {
+        if (accuracy <= 0) {
+            controlUpdate2(tpf);
+        } else if (tpf < accuracy * 8) {
             physicsControl.update(tpf);
             physicsControl.getWorld().applyResultToBone();
             physicsControl.getWorld().getPhysicsSpace().distributeEvents();
         } else {
-            controlUpdate2(tpf);
+            float accuracy2 = tpf / 8;
+            physicsControl.getWorld().setAccuracy(accuracy2);
+            physicsControl.update(tpf);
+            physicsControl.getWorld().applyResultToBone();
+            physicsControl.getWorld().getPhysicsSpace().distributeEvents();
+            physicsControl.getWorld().setAccuracy(accuracy);
         }
         resetSkins();
         calcSkins();
index af85d70..a7d2d72 100755 (executable)
@@ -30,6 +30,7 @@
 package projectkyoto.mmd.file;
 
 import java.io.BufferedInputStream;
+import java.io.EOFException;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
@@ -149,8 +150,13 @@ public class PMDModel implements Serializable{
         boneDispList = new PMDBoneDispList(is);
         headerEnglish = new PMDHeaderEnglish(this, is);
         toonTextureList = new PMDToonTextureList(is);
-        rigidBodyList = new PMDRigidBodyList(is);
-        jointList = new PMDJointList(is);
+        try {
+            rigidBodyList = new PMDRigidBodyList(is);
+            jointList = new PMDJointList(is);
+        } catch(EOFException ex) {
+            rigidBodyList = new PMDRigidBodyList();
+            jointList = new PMDJointList();
+        }
 //        toonTextureList = new PMDToonTextureList();
 //        rigidBodyList = new PMDRigidBodyList();
 //        jointList = new PMDJointList();