Операции над матрицами

Операции над матрицами достаточно большая и сложная тема. Поэтому в этой статье мы не будем обсуждать основы матричных преобразований. Есть удобные библиотеки для работы с векторами и матрицами. Здесь мы будем использовать библиотеку Sylvester и файл glUtils.js. В этом примеры мы определим несколько полезных процедур.

function loadIdentity() {
    mvMatrix = Matrix.I(4);
}
function multMatrix(m) {
    mvMatrix = mvMatrix.x(m);
}
function mvTranslate(v) {
    multMatrix(Matrix.Translation($V([v[0], v[1], v[2]])).ensure4x4());
}
function setMatrixUniforms() {
    var pUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
    gl.uniformMatrix4fv(pUniform,
                        false,
                        new Float32Array(perspectiveMatrix.flatten()));
    var mvUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");
    gl.uniformMatrix4fv(mvUniform, false, new Float32Array(mvMatrix.flatten()));
}

О функции loadIdentity() мы говорили в предыдущей статье, а функция multMatrix() как не трудно догадаться перемножает две матрицы. Функция mvTranslate() осуществляет модельно-видовое перенос матрицы.

Рассмотрим функцию setMatrixUniforms() подробнее. Команда getUniformLocation() возвращает положение uniform-переменной uPMatrix. Затем для записи в эту переменную мы используем команду uniformMatrix4fv(). Выполним те же действия для uniform-переменной uMVMatrix.

  < НАЗАД | ДАЛЕЕ >