Вам, вероятно, нужно умножить матрицу, которую вы имеете, на ту, которую вы создаете
mat4.perspective(45, gl.viewportWidth / gl.viewportHeight, 0.1, 2000.0, matrix);
mat4.translate(matrix, aPosition);
const m = [
...aLeft, 0,
...aUp, 0,
...aForward, 0,
0, 0, 0, 1,
];
mat4.multiply(matrix, matrix, m);
Обратите внимание, что я ожидаю, что aLeft
на самом деле будет aRight
. Другими словами, рассмотрим идентификатор
[
1, 0, 0, 0, // points right (x = 1)
0, 1, 0, 0, // points up (y = 1)
0, 0, 1, 0, // points ?? (z = 1) If you define +Z as forward.
0, 0, 0, 1,
]
Для матриц камеры -Z обычно вперед.
Я также предполагаю, что вы не знакомы с матрицами WebGL (OpenGL). Они называют строки «столбцами»
[
1, 0, 0, 0, // column 0
0, 1, 0, 0, // column 1
0, 0, 1, 0, // column 2
0, 0, 0, 1, // column 3
]
И поэтому xAxis идет сюда
[
Xx, Xy, Xz, 0, // column 0 (xAxis)
0, 1, 0, 0, // column 1
0, 0, 1, 0, // column 2
0, 0, 0, 1, // column 3
]
Хотя, конечно, вы не опубликовали свою математическую библиотеку. mat4
не является частью чего-либо стандартного, поэтому, не видя его, мы не можем знать, что он делает, только догадываемся.
вы можете проверить, хотя. Сделайте это
console.log(mat4.translate(mat4.create(), [11, 22, 33]));
Скорее всего, вы получите
[
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
11,22,33, 1,
]