Razlika v quaternionih

rob
Jurij Podgoršek 2022-01-02 15:45:06 +01:00
parent 775dde8482
commit 13f4902644
1 changed files with 20 additions and 21 deletions

41
anim.js
View File

@ -56,7 +56,6 @@ var qWW = new THREE.Quaternion(-1, 0, 0, 0);
var qWWo = new THREE.Quaternion(-1, 0, 0, 0); var qWWo = new THREE.Quaternion(-1, 0, 0, 0);
var qWWd = new THREE.Quaternion(-1, 0, 0, 0); var qWWd = new THREE.Quaternion(-1, 0, 0, 0);
var qObj = new THREE.Quaternion(-1, 0, 0, 0); var qObj = new THREE.Quaternion(-1, 0, 0, 0);
var qOld = new THREE.Quaternion(-1, 0, 0, 0);
var qStart = new THREE.Quaternion(-1, 0, 0, 0); var qStart = new THREE.Quaternion(-1, 0, 0, 0);
var qCalibrate = new THREE.Quaternion(); var qCalibrate = new THREE.Quaternion();
var calibrate = true; var calibrate = true;
@ -109,8 +108,6 @@ function modulirajParametre() {
} }
// Posodobi kvaternion polozaja kontrolerja // Posodobi kvaternion polozaja kontrolerja
qObj = qWW.clone();
qObj.multiply(qStart);
if (calibrate) { if (calibrate) {
qStart = qWW.clone(); qStart = qWW.clone();
@ -122,24 +119,26 @@ function modulirajParametre() {
// Rotiranje manualno (z rocnimi gibi "iz sredine") // Rotiranje manualno (z rocnimi gibi "iz sredine")
if (keysPressed[3]) { if (keysPressed[3]) {
var k = objekti.slice(-1)[0]; var k = objekti.slice(-1)[0];
k.rotation.x += qWWd.x; qObj.multiply(qWWd);
k.rotation.y += qWWd.y; k.quaternion.multiply(qWWd);
k.rotation.z += qWWd.z;
} }
if (keysPressed[2]) { if (keysPressed[2]) {
console.log(qWWd.x, qWWd.y, qWWd.z); drotacijaX += qWWd.x / 10;
drotacijaX += qWWd.x; drotacijaY += qWWd.y / 10;
drotacijaY += qWWd.y; drotacijaZ += qWWd.z / 10;
drotacijaZ += qWWd.z; }
if (keysPressed[0]) {
width += qWWd.x * 10;
barva_mod += qWW.y / 10000;
} }
} }
// Funkcija za animacijo objektov // Funkcija za animacijo objektov
function objAnim() { function objAnim() {
objekti.map(function (obj) { objekti.map(function (obj) {
obj.rotation.x += drotacijaX / 100; obj.rotation.x += drotacijaX;
obj.rotation.y += drotacijaY / 100; obj.rotation.y += drotacijaY;
obj.rotation.z += drotacijaZ / 100; obj.rotation.z += drotacijaZ;
obj.scale.z += width / 4; obj.scale.z += width / 4;
obj.scale.y += width / 4; obj.scale.y += width / 4;
@ -176,9 +175,7 @@ function addObj(w, h) {
var obj = new THREE.Line(geo, mat, THREE.LineSegments); var obj = new THREE.Line(geo, mat, THREE.LineSegments);
scene.add(obj); scene.add(obj);
obj.rotation.x = rotacijaX; obj.setRotationFromQuaternion(qObj);
obj.rotation.y = rotacijaY;
obj.rotation.z = rotacijaZ;
// Pocisti za seboj // Pocisti za seboj
if (objekti.push(obj) > obj_limit) { if (objekti.push(obj) > obj_limit) {
@ -242,12 +239,14 @@ oscCallbacks = {
'/quaternion/': [ '/quaternion/': [
function (args) { function (args) {
// Popravimo osi (w x y z po defaultu HMM) // Popravimo osi (w x y z po defaultu HMM)
qWWo = qWW.clone() qWWo = qWW.clone();
[qWW.w, qWW.z, qWW.x, qWW.y] = args.map(getVal) [qWW.w, qWW.z, qWW.x, qWW.y] = args.map(getVal);
// Dve sta obratno :) // Dve sta obratno :)
qWW.x *= -1 qWW.x *= -1;
qWW.z *= -1 qWW.z *= -1;
qWWd = qWWo.premultiply(qWW) qWWd = qWW.clone();
qWWd.conjugate();
qWWd.multiply(qWWo);
} }
], ],
/* /*