Операции над матрицами
Операции над матрицами достаточно большая и сложная тема. Поэтому в этой статье мы не будем обсуждать основы матричных преобразований. Есть удобные библиотеки для работы с векторами и матрицами. Здесь мы будем использовать библиотеку 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.