Переход с glMatrix 1 на glMatrix 2 - PullRequest
       25

Переход с glMatrix 1 на glMatrix 2

0 голосов
/ 20 октября 2018

Мне не удалось обновить эти функции из старого приложения, использующего glMatrix 1.2, до glMatrix 2.7:

calculateNormal() {
    mat4.identity(this.normalMatrix);
    mat4.set(this.modelViewMatrix, this.normalMatrix);
    mat4.inverse(this.normalMatrix);
    mat4.transpose(this.normalMatrix);
}

А следующая функция умножения матрицы на 4-компонентный вектор несуществует:

calculateOrientation() {
    mat4.multiplyVec4(this.matrix, [1, 0, 0, 0], this.right);
    mat4.multiplyVec4(this.matrix, [0, 1, 0, 0], this.up);
    mat4.multiplyVec4(this.matrix, [0, 0, 1, 0], this.normal);
}

1 Ответ

0 голосов
/ 20 октября 2018

В общем случае нормальная матрица - это матрица 3 * 3 (mat3).

Но в любом случае glMatrix хорошо документирована и в соответствии с документациейmat4 и vec4, ваш код может быть перенесен так:

calculateNormal() {
    this.normalMatrix = mat4.clone(this.modelViewMatrix);
    mat4.invert(this.normalMatrix, this.normalMatrix);
    mat4.transpose(this.normalMatrix, this.normalMatrix);
}

Может быть, нет необходимости create векторы вследующее, но я не знаю, существуют ли векторы в вашем случае:

calculateOrientation() {

    this.right = vec4.create();
    vec4.set( this.right, 1, 0, 0, 0 );
    vec4.transformMat4( this.right, this.right, this.matrix );

    this.up = vec4.create();
    vec4.set( this.up, 0, 1, 0, 0 );
    vec4.transformMat4( this.up, this.up, this.matrix );

    this.normal = vec4.create();
    vec4.set( this.normal, 0, 0, 1, 0 );
    vec4.transformMat4( this.normal, this.normal, this.matrix );
}
...