From 02e145cb923d601395acc7f15ae9e13f85ef2fbb Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Mon, 02 Jul 2018 21:38:58 -0400
Subject: [PATCH] Hip orientation.
---
FileObject.java | 2
ObjEditor.java | 2
ScriptNode.java | 10 +-
Mocap.java | 134 ++++++++++++++++++++++++++++++++++++++------
4 files changed, 121 insertions(+), 27 deletions(-)
diff --git a/FileObject.java b/FileObject.java
index 0ebe57c..e41d012 100644
--- a/FileObject.java
+++ b/FileObject.java
@@ -108,7 +108,7 @@
//if (filecontent == null)
// return 0;
- return count>0?1:0; // GetObject().Size();
+ return count>1?1:0; // GetObject().Size();
}
public int size()
diff --git a/Mocap.java b/Mocap.java
index 5b79812..172ab78 100644
--- a/Mocap.java
+++ b/Mocap.java
@@ -283,28 +283,28 @@
poship.x = hip.get(0).toParent[3][0];
poship.y = hip.get(0).toParent[3][1];
poship.z = hip.get(0).toParent[3][2];
+
+ temp.x = 1;
+ temp.y = 0;
+ temp.z = 0;
+
+ LA.xformDir(temp, hip.get(0).toParent, temp);
+
+ angleYhip = Math.atan2(-temp.z, temp.x);
- // AT*AR = A'T*BT*A'R*BR
- //
- LA.matInvert(hip.get(0).toParent, matrix);
+ LA.matIdentity(matrix);
+ LA.matYRotate(matrix, angleYhip);
+ LA.matTranslate(matrix, poship.x, poship.y, poship.z);
+
+ //LA.matInvert(hip.get(0).toParent, matrix);
+ LA.matInvert(matrix, matrix);
//LA.matIdentity(matrix);
//LA.matTranslate(matrix, -poship.x, -poship.y, -poship.z);
LA.matConcat(toParent, matrix, toParent);
-// poship.x = hip.get(0).toParent[3][0];
-// poship.y = hip.get(0).toParent[3][1];
-// poship.z = hip.get(0).toParent[3][2];
-//
-// temp.x = 1;
-// temp.y = 0;
-// temp.z = 0;
-//
-// LA.xformDir(temp, hip.get(0).toParent, temp);
-//
-// angleYhip = Math.atan2(-temp.z, temp.x);
-
+
LA.matConcat(toParent, hip.get(0).toParent, matrix);
pos.x = hip.get(0).toParent[3][0];
pos.y = hip.get(0).toParent[3][1];
@@ -476,6 +476,94 @@
currenthip[i] = data[frame3 + i];
}
}
+
+ void SetHipOrientation()
+ {
+ Object3D hip = get(0);
+
+ LA.matConcat(toParent, hip.get(0).toParent, matrix);
+
+ cVector centroid = new cVector();
+ centroid.x = matrix[3][0];
+ centroid.y = matrix[3][1];
+ centroid.z = matrix[3][2];
+ this.getCentroid(centroid, true);
+
+ cVector goal = GetGoal(centroid);
+ if (goal != null)
+ {
+ System.err.println("GOAL change (" + this + "): " + goal + " (was " + goalx + ", " + goalz + ")");
+
+ goalx = goal.x;
+ goalz = goal.z;
+ targetx = targetz = 0;
+ }
+
+ if (goalx == 0 && goalz == 0)
+ {
+ // No target
+ if (ScriptNode.speaker != null)
+ {
+ Object3D sourcenode = GetFileRoot();
+ Object3D speakernode = ScriptNode.speaker.GetFileRoot();
+
+ //System.err.println("speaker is " + speakernode + "; last was " + ScriptNode.lastspeaker);
+
+ Object3D speaker = ScriptNode.speaker;
+
+ if (speakernode == sourcenode)
+ {
+ if (ScriptNode.lastspeaker != null)
+ {
+ speakernode = ScriptNode.lastspeaker.GetFileRoot();
+ speaker = ScriptNode.lastspeaker;
+ }
+ else
+ return;
+ }
+
+ cVector dst = new cVector();
+
+ boolean success = speakernode.getCentroid(dst); // , true);
+
+ if (!success)
+ new Exception().printStackTrace();
+
+ //speakernode.parent.TransformToWorld(dst);
+ //sourcenode.parent.TransformToLocal(dst);
+ this.parent.TransformToLocal(dst);
+
+ goalx = dst.x;
+ goalz = dst.z;
+ }
+ else
+ return;
+ }
+
+ cVector temp = new cVector();
+
+ temp.x = 1;
+ temp.y = 0;
+ temp.z = 0;
+
+ LA.xformDir(temp, matrix, temp);
+
+ double angleYhip = Math.atan2(-temp.z, temp.x);
+
+ double angleYtarget = Math.atan2(goalx - centroid.x, goalz - centroid.z);
+
+ LA.matIdentity(matrix);
+ LA.matTranslate(matrix, -centroid.x, -centroid.y, -centroid.z);
+ double angle = CurveAngle(0, angleYtarget - angleYhip, 1); // 0.1f);
+ LA.matYRotate(matrix, angle);
+ LA.matTranslate(matrix, centroid.x, centroid.y, centroid.z);
+
+ LA.matConcat(matrix, toParent, toParent);
+
+ LA.matInvert(toParent, fromParent);
+
+ CheckForAction(centroid);
+ }
void WriteTo(java.io.Writer writer) throws Exception
{
@@ -552,8 +640,8 @@
double targetx;
double targetz;
- double goalx;
- double goalz;
+ double goalx = -20;
+ double goalz = -10;
boolean followpath;
@@ -910,6 +998,8 @@
testvect.set(from);
testvect.sub(fromto.from);
+ testvect.y = 0; // PATCH
+
int factor = 1;
//if (CameraPane.FAST)
@@ -951,6 +1041,8 @@
testvect.set(from);
testvect.sub(fromto.from);
+
+ testvect.y = 0; // PATCH
int factor = 1;
@@ -2243,6 +2335,8 @@
e.printStackTrace();
}
+ SetHipOrientation();
+
if (true)
return;
@@ -2670,8 +2764,8 @@
// set rotation
//if (bone._rotationEnabled)
if (//frame > 0 &&
- !bone.skipmocap //&&
- //!bone.name.contains("head") &&
+ !bone.skipmocap &&
+ !bone.name.contains("head") // &&
// !bone.name.contains("rFoot") &&
// !bone.name.contains("lFoot") &&
// !bone.name.contains("Pinky") &&
@@ -3096,7 +3190,7 @@
// LA.matIdentity(rot.fromParent);
// july 2014
- goalx = goalz = 0;
+// goalx = goalz = 0;
targetx = targetz = 0;
//SetPositionDelta(true, true, true, false);
diff --git a/ObjEditor.java b/ObjEditor.java
index c4118f0..a7f467c 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -3664,7 +3664,7 @@
if (obj.parent != null)
{
- obj.parent.TransformToWorld(interest);
+// obj.parent.TransformToWorld(interest);
}
if (!CameraPane.TRACK)
diff --git a/ScriptNode.java b/ScriptNode.java
index 9cd6e9c..6e25865 100644
--- a/ScriptNode.java
+++ b/ScriptNode.java
@@ -997,12 +997,12 @@
if (command.equals("fromto"))
{
cVector from = new cVector(Float.parseFloat(strs[index+2]),
- Float.parseFloat(strs[index+3]),
- Float.parseFloat(strs[index+4]));
+ 0, // Float.parseFloat(strs[index+3]),
+ Float.parseFloat(strs[index+3]));
- cVector to = new cVector(Float.parseFloat(strs[index+5]),
- Float.parseFloat(strs[index+6]),
- Float.parseFloat(strs[index+7]));
+ cVector to = new cVector(Float.parseFloat(strs[index+4]),
+ 0, // Float.parseFloat(strs[index+6]),
+ Float.parseFloat(strs[index+5]));
((Mocap) object).AddFromTo(from, to);
return;
--
Gitblit v1.6.2