Я преобразовал вектор, который лежит на собственном пространстве матрицы преобразования, используя Object3D.applyMatrix4
. Я ожидал, что он вообще не будет двигаться, потому что собственное значение равнялось 1 или, по крайней мере, оставалось на его промежутке, но оно переместилось в какое-то неожиданное место.
Я создал пример проекта: stackblitz
Но ниже, вероятно, весь код, который вам понадобится
let pointGeo = new THREE.Geometry()
pointGeo.vertices = [new THREE.Vector3(1,-1,1)]
let pmat = new THREE.PointsMaterial({color: 0x00f0f0, size: 0.3})
let pointObj = new THREE.Points(pointGeo, pmat)
let matrix = new THREE.Matrix4()
matrix.set( 1, 3, 3, 0,
-3, -5, -3, 0,
3, 3, 1, 0,
0, 0, 0, 1)
pointObj.applyMatrix4(matrix)
Чтобы объяснить, я преобразовываю точку (1, -1, 1)
(где фиолетовый) с матрицей. Умножение на матрицу не должно изменять значение. (проверено дважды ручным вычислением) Но оно перемещает его туда, где находится синий квадрат.
Есть ли другие стадии, где применяется какое-то другое преобразование? Что мне здесь не хватает?