diff --git a/src/main/java/io/eiren/gui/SkeletonConfig.java b/src/main/java/io/eiren/gui/SkeletonConfig.java index d6730ca9e..6d8305b14 100644 --- a/src/main/java/io/eiren/gui/SkeletonConfig.java +++ b/src/main/java/io/eiren/gui/SkeletonConfig.java @@ -90,6 +90,7 @@ public class SkeletonConfig extends EJBag { private void change(String joint, float diff) { float current = server.humanPoseProcessor.getSkeletonConfig(joint); server.humanPoseProcessor.setSkeletonConfig(joint, current + diff); + server.saveConfig(); labels.get(joint).setText(StringUtils.prettyNumber(current + diff, 2)); } diff --git a/src/main/java/io/eiren/vr/VRServer.java b/src/main/java/io/eiren/vr/VRServer.java index 5cbc64aab..75654cc0c 100644 --- a/src/main/java/io/eiren/vr/VRServer.java +++ b/src/main/java/io/eiren/vr/VRServer.java @@ -144,7 +144,7 @@ public class VRServer extends Thread { trackersServer.start(); driverBridge.start(); while(true) { - final long start = System.currentTimeMillis(); + //final long start = System.currentTimeMillis(); do { Runnable task = tasks.poll(); if(task == null) @@ -158,9 +158,9 @@ public class VRServer extends Thread { humanPoseProcessor.update(); - final long time = System.currentTimeMillis() - start; + //final long time = System.currentTimeMillis() - start; try { - Thread.sleep(Math.max(1, 10L - time)); // 100Hz + Thread.sleep(1); // 1000Hz } catch(InterruptedException e) { } } diff --git a/src/main/java/io/eiren/vr/processor/ComputedHumanPoseTrackerPosition.java b/src/main/java/io/eiren/vr/processor/ComputedHumanPoseTrackerPosition.java index 3ba8b6946..33b7e1673 100644 --- a/src/main/java/io/eiren/vr/processor/ComputedHumanPoseTrackerPosition.java +++ b/src/main/java/io/eiren/vr/processor/ComputedHumanPoseTrackerPosition.java @@ -4,6 +4,6 @@ public enum ComputedHumanPoseTrackerPosition { WAIST, CHEST, - LEFT_ANKLE, - RIGHT_ANKLE; + LEFT_FOOT, + RIGHT_FOOT; } diff --git a/src/main/java/io/eiren/vr/processor/HumanPoseProcessor.java b/src/main/java/io/eiren/vr/processor/HumanPoseProcessor.java index e7ca47dfc..38001e2d8 100644 --- a/src/main/java/io/eiren/vr/processor/HumanPoseProcessor.java +++ b/src/main/java/io/eiren/vr/processor/HumanPoseProcessor.java @@ -32,8 +32,8 @@ public class HumanPoseProcessor { this.server = server; this.hmd = hmd; computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.WAIST)); - computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.LEFT_ANKLE)); - computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.RIGHT_ANKLE)); + computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.LEFT_FOOT)); + computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.RIGHT_FOOT)); } @VRServerThread diff --git a/src/main/java/io/eiren/vr/processor/HumanSekeletonWithLegs.java b/src/main/java/io/eiren/vr/processor/HumanSekeletonWithLegs.java index 1ee0cdc37..249bb0282 100644 --- a/src/main/java/io/eiren/vr/processor/HumanSekeletonWithLegs.java +++ b/src/main/java/io/eiren/vr/processor/HumanSekeletonWithLegs.java @@ -19,17 +19,21 @@ public class HumanSekeletonWithLegs extends HumanSkeleonWithWaist { protected final Tracker leftLegTracker; protected final Tracker leftAnkleTracker; - protected final ComputedHumanPoseTracker computedLeftAnkleTracker; + protected final Tracker leftFootTracker; + protected final ComputedHumanPoseTracker computedLeftFootTracker; protected final Tracker rightLegTracker; protected final Tracker rightAnkleTracker; - protected final ComputedHumanPoseTracker computedRightAnkleTracker; + protected final Tracker rightFootTracker; + protected final ComputedHumanPoseTracker computedRightFootTracker; protected final TransformNode leftHipNode = new TransformNode("Left-Hip", false); protected final TransformNode leftKneeNode = new TransformNode("Left-Knee", false); protected final TransformNode leftAnkleNode = new TransformNode("Left-Ankle", false); + protected final TransformNode leftFootNode = new TransformNode("Left-Foot", false); protected final TransformNode rightHipNode = new TransformNode("Right-Hip", false); protected final TransformNode rightKneeNode = new TransformNode("Right-Knee", false); protected final TransformNode rightAnkleNode = new TransformNode("Right-Ankle", false); + protected final TransformNode rightFootNode = new TransformNode("Right-Foot", false); /** * Distance between centers of both hips @@ -53,19 +57,21 @@ public class HumanSekeletonWithLegs extends HumanSkeleonWithWaist { super(server, waistTracker, chestTracker, computedTrackers); this.leftLegTracker = trackers.get(TrackerBodyPosition.LEFT_LEG); this.leftAnkleTracker = trackers.get(TrackerBodyPosition.LEFT_ANKLE); + this.leftFootTracker = trackers.get(TrackerBodyPosition.LEFT_FOOT); this.rightLegTracker = trackers.get(TrackerBodyPosition.RIGHT_LEG); this.rightAnkleTracker = trackers.get(TrackerBodyPosition.RIGHT_ANKLE); + this.rightFootTracker = trackers.get(TrackerBodyPosition.RIGHT_FOOT); ComputedHumanPoseTracker lat = null; ComputedHumanPoseTracker rat = null; for(int i = 0; i < computedTrackers.size(); ++i) { ComputedHumanPoseTracker t = computedTrackers.get(i); - if(t.skeletonPosition == ComputedHumanPoseTrackerPosition.LEFT_ANKLE) + if(t.skeletonPosition == ComputedHumanPoseTrackerPosition.LEFT_FOOT) lat = t; - if(t.skeletonPosition == ComputedHumanPoseTrackerPosition.RIGHT_ANKLE) + if(t.skeletonPosition == ComputedHumanPoseTrackerPosition.RIGHT_FOOT) rat = t; } - computedLeftAnkleTracker = lat; - computedRightAnkleTracker = rat; + computedLeftFootTracker = lat; + computedRightFootTracker = rat; lat.setStatus(TrackerStatus.OK); rat.setStatus(TrackerStatus.OK); hipsWidth = server.config.getFloat("body.hipsWidth", hipsWidth); @@ -89,6 +95,9 @@ public class HumanSekeletonWithLegs extends HumanSkeleonWithWaist { rightKneeNode.attachChild(rightAnkleNode); rightAnkleNode.localTransform.setTranslation(0, -ankleLength, 0); + + leftAnkleNode.attachChild(leftFootNode); + rightAnkleNode.attachChild(rightFootNode); configMap.put("Hips width", hipsWidth); configMap.put("Hip length", hipsLength); @@ -132,7 +141,13 @@ public class HumanSekeletonWithLegs extends HumanSkeleonWithWaist { leftHipNode.localTransform.setRotation(hipBuf); leftKneeNode.localTransform.setRotation(kneeBuf); leftAnkleNode.localTransform.setRotation(kneeBuf); + leftFootNode.localTransform.setRotation(kneeBuf); + if(leftFootTracker != null) { + leftFootTracker.getRotation(kneeBuf); + leftFootNode.localTransform.setRotation(kneeBuf); + } + // Right Leg rightLegTracker.getRotation(hipBuf); rightAnkleTracker.getRotation(kneeBuf); @@ -142,6 +157,12 @@ public class HumanSekeletonWithLegs extends HumanSkeleonWithWaist { rightHipNode.localTransform.setRotation(hipBuf); rightKneeNode.localTransform.setRotation(kneeBuf); rightAnkleNode.localTransform.setRotation(kneeBuf); + rightFootNode.localTransform.setRotation(kneeBuf); + + if(rightFootTracker != null) { + rightFootTracker.getRotation(kneeBuf); + rightFootNode.localTransform.setRotation(kneeBuf); + } // TODO Calculate waist node as some function between waist and hip rotations } @@ -179,12 +200,12 @@ public class HumanSekeletonWithLegs extends HumanSkeleonWithWaist { protected void updateComputedTrackers() { super.updateComputedTrackers(); - computedLeftAnkleTracker.position.set(leftAnkleNode.worldTransform.getTranslation()); - computedLeftAnkleTracker.rotation.set(leftAnkleNode.worldTransform.getRotation()); - computedLeftAnkleTracker.dataTick(); + computedLeftFootTracker.position.set(leftFootNode.worldTransform.getTranslation()); + computedLeftFootTracker.rotation.set(leftFootNode.worldTransform.getRotation()); + computedLeftFootTracker.dataTick(); - computedRightAnkleTracker.position.set(rightAnkleNode.worldTransform.getTranslation()); - computedRightAnkleTracker.rotation.set(rightAnkleNode.worldTransform.getRotation()); - computedRightAnkleTracker.dataTick(); + computedRightFootTracker.position.set(rightFootNode.worldTransform.getTranslation()); + computedRightFootTracker.rotation.set(rightFootNode.worldTransform.getRotation()); + computedRightFootTracker.dataTick(); } } diff --git a/src/main/java/io/eiren/vr/processor/TrackerBodyPosition.java b/src/main/java/io/eiren/vr/processor/TrackerBodyPosition.java index 9a8a22134..a919bacf8 100644 --- a/src/main/java/io/eiren/vr/processor/TrackerBodyPosition.java +++ b/src/main/java/io/eiren/vr/processor/TrackerBodyPosition.java @@ -13,6 +13,8 @@ public enum TrackerBodyPosition { RIGHT_LEG(Quaternion.IDENTITY, "body:right_leg"), LEFT_ANKLE(Quaternion.IDENTITY, "body:left_ankle"), RIGHT_ANKLE(Quaternion.IDENTITY, "body:right_ankle"), + LEFT_FOOT(Quaternion.IDENTITY, "body:left_foot"), + RIGHT_FOOT(Quaternion.IDENTITY, "body:right_foot"), ; public final Quaternion baseRotation;