/* * @Author: Xu.Wang * @Date: 2020-04-05 21:12:38 * @Last Modified by: Xu.Wang * @Last Modified time: 2020-04-06 01:09:19 */ import { Matrix } from './matrix' import { Vector3 } from '.' export class Matrix4x4 extends Matrix { constructor(params?: Array) { if (params === undefined) { // set to identity matrix params = new Array(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) } else { // check size if (16 !== params.length) { console.log('Matrix4x4 init error: size is not equal to 16') return } } super(4, 4, params) } setDiagonal(s: number) { let _elements = this.data() _elements[0] = _elements[5] = _elements[10] = _elements[15] = s } setOffDiagonal(s: number) { let _elements = this.data() _elements[1] = _elements[2] = _elements[3] = _elements[4] = _elements[6] = _elements[7] = _elements[8] = _elements[9] = _elements[11] = _elements[12] = _elements[13] = _elements[14] = s } identity(): Matrix4x4 { return new Matrix4x4( new Array(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) ) } mulMat(m4: Matrix4x4): Matrix4x4 { let _m = super.mulMat(m4) return new Matrix4x4(_m.data()) } mulV3(v3: Vector3): Vector3 { let _v3 = super.mulVec(v3) return new Vector3(_v3.data()[0], _v3.data()[1], _v3.data()[2]) } }