Значение z в NDC за пределами [-1...1]
Пытаюсь написать простой графический конвейер, столкнулся с проблемой в NDC. Координаты выходят за пределы диапазона от -1 до 1, при том что вершина явно находится внутри пирамиды камеры (ближняя плоскость на расстоянии 0,01, дальняя плоскость 100, угол обзора 90градусов). Использую следующий порядок умножения матриц: модельная матрица M умножается на мировую W (масштабирование, поворот, перенос) затем на видовую матрицу камеры V и проекционную матрицу P. потом выполняю деление перспективы на w. Ниже пример расчета для вектора (2,3,6)
В коде это сейчас выглядит так:
var M = new Vector(2,3,6)
var S = Matrix.scale(1.5,1.5,1.5)
var RX = Matrix.rotation.x(10)
var RY = Matrix.rotation.y(20)
var RZ = Matrix.rotation.z(30)
var R = Matrix.multiply.matrix(Matrix.multiply.matrix(RX, RY),RZ)
var T = Matrix.translation(1,2,3)
var W = Matrix.multiply.matrix(Matrix.multiply.matrix(S,R),T)
var WM = Matrix.multiply.vector(W,M)
// Vector {x: 2.5686, y: 6.8377, z: 14.3316, w: 1}
var V = camera.view()
var VM = Matrix.multiply.vector(V,WM)
//Vector {x: 4.1118, y: 0.5398, z: -13.0924, w: 1}
var P = camera.getProjectionMatrix()
var PM = Matrix.multiply.vector(P,VM)
//Vector {x: 0.8236, y: 0.5398, z: 13.0750, w: 13.0924}
var NDC = new Vector(PM.x/PM.w, PM.y/PM.w, PM.z/PM.w)
//Vector {x: 0.2080, y: -0.1805, z: 1.0002, w: 1}
Правильна ли последовательность умножения матриц? Подскажите пожалуйста, что я делаю не так?
Буду благодарен полезным источникам по этой теме.