Суть в том что камера Flying, она находится в (0,0,0), надо менять position вслед за мышью для эффекта паралакса (если перед нами объекты на разном удалении от камеры), тоесть камера должна двигаться влево/вправо, принимая mouse.x и вверх/вниз, принимая mouse.y. Вверх/вниз проблем нет, эта ось не зависит от поворота камеры, поэтому это решается легко – app.camera.position.y = mouse.y. И вроде бы с влево вправо должно быть не слишком сложно, просто делать вектор, который будет принимать в vec.x = mouse.x, а затем просто поворачивать этот вектор на угол поворота камеры по вертикальной оси, но на деле у меня не выходит этого сделать.
let rt = app.camera.rotation
let v1 = new v3d.Vector3(mouse.x*6,mouse.y*6,0)
let v2 = new v3d.Vector3();
v2.copy(v1)
v2.applyAxisAngle(new v3d.Vector3(0,1,0), rt._y);
app.camera.position.set(v2.x,v2.y,v2.z)
в этом случае, если я смотрю ровно по оси X или Z, всё работает как надо, а если смотрю в средние значения то камера двигается вперёд/назад, у меня не хватает компетенции, чтобы решить эту задачу.
Ощущение что applyAxisAngle для angle требуются не те значения которые даёт app.camera.rotation._y.