From 89c1ad67bc65d24ceadfa9e95f8c5515283f1e97 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Sun, 01 Jul 2018 15:45:28 -0400 Subject: [PATCH] Reverse matrix order. --- ObjEditor.java | 4 ++ Camera.java | 8 ++- LA.java | 33 ++++++++++------ Mocap.java | 27 +++++++++---- 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/Camera.java b/Camera.java index 82f2189..8454950 100644 --- a/Camera.java +++ b/Camera.java @@ -392,13 +392,15 @@ if (CameraPane.ROTATECAMERA) { double[][] rotate = { { 0,1,0,0 }, { -1,0,0,0}, { 0,0,1,0}, { 0,0,0,1 } }; - double[][] rotate_1 = { { 0,-1,0,0 }, { 1,0,0,0}, { 0,0,1,0}, { 0,0,0,1 } }; + //double[][] rotate_1 = { { 0,-1,0,0 }, { 1,0,0,0}, { 0,0,1,0}, { 0,0,0,1 } }; - LA.matConcat(rotate, fromScreen, fromScreen); - LA.matConcat(toScreen, rotate_1, toScreen); + LA.matConcat(fromScreen, rotate, fromScreen); + //LA.matConcat(toScreen, rotate_1, toScreen); } //if (this == CameraPane.lightCamera) //CameraPane.lighttouched = true; + + LA.matInvert(fromScreen, toScreen); } // void Draw(CameraPane display, Object3D /*Composite*/ root, boolean selected) diff --git a/LA.java b/LA.java index 3669362..20a9211 100644 --- a/LA.java +++ b/LA.java @@ -306,6 +306,14 @@ } + GrafreeD.Assert(Math.abs(src[0][3]) <= 1E-15); + GrafreeD.Assert(Math.abs(src[1][3]) <= 1E-15); + GrafreeD.Assert(Math.abs(src[2][3]) <= 1E-15); + GrafreeD.Assert(Math.abs(src[3][3] - 1) <= 1E-15); + GrafreeD.Assert(Math.abs(dst[0][3]) <= 1E-15); + GrafreeD.Assert(Math.abs(dst[1][3]) <= 1E-15); + GrafreeD.Assert(Math.abs(dst[2][3]) <= 1E-15); + GrafreeD.Assert(Math.abs(dst[3][3] - 1) <= 1E-15); } static double toRadians(double degrees) @@ -321,14 +329,14 @@ for (int j = 0; j < 4; j++) { - double[] leftj = left[j]; + double[] rightj = right[j]; double[] concat = concatTemp[j]; for (int i = 0; i < 4; i++) { concat[i] = 0; for (int k = 0; k < 4; k++) { - concat[i] += leftj[k] * right[k][i]; + concat[i] += left[k][i] * rightj[k]; } } } @@ -345,7 +353,7 @@ //xlateTemp[0][3] = dx; //xlateTemp[1][3] = dy; //xlateTemp[2][3] = dz; - matConcat(mat, xlateTemp, mat); + matConcat(xlateTemp, mat, mat); } static void matHomogene(double mat[][], double dx, double dy, double dz) @@ -357,7 +365,7 @@ //xlateTemp[0][3] = dx; //xlateTemp[1][3] = dy; //xlateTemp[2][3] = dz; - matConcat(mat, xlateTemp, mat); + matConcat(xlateTemp, mat, mat); } static void matTranslateInv(double mat[][], double dx, double dy, double dz) @@ -369,7 +377,7 @@ //xlateTemp[0][3] = dx; //xlateTemp[1][3] = dy; //xlateTemp[2][3] = dz; - matConcat(xlateTemp, mat, mat); + matConcat(mat, xlateTemp, mat); } static void matScale(double mat[][], double sx, double sy, double sz) @@ -378,7 +386,8 @@ xlateTemp[0][0] = sx; xlateTemp[1][1] = sy; xlateTemp[2][2] = sz; - matConcat(mat, xlateTemp, mat); + matConcat(xlateTemp, mat, mat); + //matConcat(mat, xlateTemp, mat); } static void matXRotate(double mat[][], double radians) @@ -387,9 +396,9 @@ rotTemp[1][1] = rotTemp[2][2] = (double) Math.cos(radians); rotTemp[2][1] = -(rotTemp[1][2] = (double) Math.sin(radians)); // if (CameraPane.LOCALTRANSFORM) - // matConcat(rotTemp, mat, mat); + matConcat(rotTemp, mat, mat); // else - matConcat(mat, rotTemp, mat); + // matConcat(mat, rotTemp, mat); } static void matYRotate(double mat[][], double radians) @@ -398,9 +407,9 @@ rotTemp[0][0] = rotTemp[2][2] = (double) Math.cos(-radians); rotTemp[2][0] = -(rotTemp[0][2] = (double) Math.sin(-radians)); // if (CameraPane.LOCALTRANSFORM) - // matConcat(rotTemp, mat, mat); + matConcat(rotTemp, mat, mat); // else - matConcat(mat, rotTemp, mat); + // matConcat(mat, rotTemp, mat); } static void matZRotate(double mat[][], double radians) @@ -409,9 +418,9 @@ rotTemp[0][0] = rotTemp[1][1] = (double) Math.cos(radians); rotTemp[1][0] = -(rotTemp[0][1] = (double) Math.sin(radians)); // if (CameraPane.LOCALTRANSFORM) - // matConcat(rotTemp, mat, mat); + matConcat(rotTemp, mat, mat); // else - matConcat(mat, rotTemp, mat); + // matConcat(mat, rotTemp, mat); } // Project A onto B diff --git a/Mocap.java b/Mocap.java index fc96f41..93dd7ac 100644 --- a/Mocap.java +++ b/Mocap.java @@ -29,7 +29,7 @@ void Fade() { - if (true) // currentbones == null || CameraPane.fullreset) + if (currentbones == null || CameraPane.fullreset) return; cVector temp = new cVector(); @@ -107,7 +107,7 @@ //data[f3 + i] += pos[i] - data[frame3 + i]; // data[f3 + i] = k*data[f3+i] + (1-k)* // currentbones[boneframe3 + i-end]; - data[f3 + i] = (float)CurveAngle(data[f3+i], currenthip[i], 1-k); +// data[f3 + i] = (float)CurveAngle(data[f3+i], currenthip[i], 1-k); } // TODO: translation @@ -225,7 +225,7 @@ // before resetting the mocap data. void SetGlobalTransform() { - SetCurrentBones(frame); + //SetCurrentBones(frame); cVector temp = new cVector(); cVector pos = new cVector(); @@ -235,6 +235,12 @@ double angleYhip = 0; Object3D hip = get(0); + + if (hip.get(0).toParent == null) + { + hip.get(0).toParent = LA.newMatrix(); + hip.get(0).fromParent = LA.newMatrix(); + } LA.matConcat(toParent, hip.get(0).toParent, matrix); poship.x = matrix[3][0]; @@ -3020,7 +3026,8 @@ } } - static int offset = 1; // 5; // 10; // 5; // 100; // skip initial "T" + // skip initial "T" + static int offset = 1; // 5; // 10; // 5; // 100; void ReadBVH() { @@ -3132,7 +3139,7 @@ baseframe += step; //frame = baseframe; - frame += step; + //frame += step; // if (frame != baseframe) // { @@ -3184,13 +3191,17 @@ } } } + + frame = GetFirstFrame(); } + else + frame += step; //SetPositionDelta(false); - if (frame >= bvh.animation.getNumFrames()) - //baseframe = - frame = GetFirstFrame(); // 0; // offset; // initial point +// if (frame >= bvh.animation.getNumFrames()) +// //baseframe = +// frame = GetFirstFrame(); // 0; // offset; // initial point //System.err.println("frame = " + frame); if (lastframe != 0) diff --git a/ObjEditor.java b/ObjEditor.java index 74fe7f1..c4118f0 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -2194,6 +2194,8 @@ { Mocap sel = (Mocap) copy.selection.get(0); + sel.SetCurrentBones(sel.frame); + sel.fullname = fullname; if (changename) @@ -2245,6 +2247,8 @@ { Mocap sel = (Mocap) select; + sel.SetCurrentBones(sel.frame); + File file = new File(fullname); // Mocap mocap = new Mocap("Mocap" + file.getName()); -- Gitblit v1.6.2