Sorry for the silly question, I should be able to figure this out from the documentation but everything I try is either wrong or feels overly complicated. What is the equivalent of Euler.applyMatrix? I’ll accept Quaternion.applyMatrix but Euler is easier on my little brain.

let mat = new THREE.Matrix3().set(
//rotateX( -PI/2 )
1, 0, 0,
0, 0, 1,
0, -1, 0 );

let pos = new THREE.Vector3(1,2,3);
console.log(pos.applyMatrix3(mat)); // {x:1, y:3, z:-2}

let rot = new THREE.Euler(1,2,3);
console.log(rot.applyMatrix3(mat)); // how?

Quaterion and Euler do not have applyMatrix*() methods. 3x3 matrices, euler angles and quaternions are different ways to represent orientation in 3D space. It is quite common to convert between these representations but not to “apply” on representation to another one.

Thanks for the help. When sitting at my desk struggling to figure something out, I often find myself thinking “I should just post a question, Mugen always answers quickly.”

In this case I think I oversimplified the problem. In the example above, the answer I was looking for was quaternion.premultiply but that didn’t solve my problem.

The real source of my problem was Unity. I’m trying to import some FBX files but child objects weren’t rotating correctly. I assumed they were XYZ order because why wouldn’t they be?

Unity (or maybe just the models I’m using) stores some userData inside each node. It’s nothing but a copy of the transformation matrix so the first thing I did is throw that data away. Then something tickled my brain. I went back and looked, sure enough, they were using ZYX order instead of XYZ.

Ug. Two days wasted.