constructor( readonly type: BoneType, readonly basis: Triple<vec3>, readonly prevJoint: vec3, readonly nextJoint: vec3, readonly width: number ) { const difference = vec3.subtract(vec3.create(), this.nextJoint, this.prevJoint); this.length = vec3.length(difference); this.basisMatrix = mat3.fromValues( this.basis[0][0], this.basis[0][1], this.basis[0][2], this.basis[1][0], this.basis[1][1], this.basis[1][2], this.basis[2][0], this.basis[2][1], this.basis[2][2] ); this.left = mat3.determinant(this.basisMatrix) < 0; this.center = vec3.lerp(vec3.create(), this.prevJoint, this.nextJoint, 0.5); this.direction = Bone.createBoneDirection(this.basisMatrix); this.matrix = Bone.createBoneMatrix(this.basisMatrix, this.center, this.left); }
outMat2d = mat2d.multiplyScalarAndAdd (outMat2d, mat2dA, mat2dB, 2); outBool = mat2d.exactEquals(mat2dA, mat2dB); outBool = mat2d.equals(mat2dA, mat2dB); // mat3 outMat3 = mat3.create(); outMat3 = mat3.fromMat4(outMat3, mat4A); outMat3 = mat3.clone(mat3A); outMat3 = mat3.copy(outMat3, mat3A); outMat3 = mat3.fromValues(1, 2, 3, 4, 5, 6, 7, 8, 9); outMat3 = mat3.set(outMat3, 1, 2, 3, 4, 5, 6, 7, 8, 9); outMat3 = mat3.identity(outMat3); outMat3 = mat3.transpose(outMat3, mat3A); outMat3Null = mat3.invert(outMat3, mat3A); outMat3 = mat3.adjoint(outMat3, mat3A); outVal = mat3.determinant(mat3A); outMat3 = mat3.multiply(outMat3, mat3A, mat3B); outMat3 = mat3.mul(outMat3, mat3A, mat3B); outMat3 = mat3.translate(outMat3, mat3A, vec3A); outMat3 = mat3.rotate(outMat3, mat3A, Math.PI/2); outMat3 = mat3.scale(outMat3, mat3A, vec2A); outMat3 = mat3.fromTranslation(outMat3, vec2A); outMat3 = mat3.fromRotation(outMat3, Math.PI); outMat3 = mat3.fromScaling(outMat3, vec2A); outMat3 = mat3.fromMat2d(outMat3, mat2dA); outMat3 = mat3.fromQuat(outMat3, quatA); outMat3Null = mat3.normalFromMat4(outMat3, mat4A); outStr = mat3.str(mat3A); outVal = mat3.frob(mat3A); outMat3 = mat3.add(outMat3, mat3A, mat3B); outMat3 = mat3.subtract(outMat3, mat3A, mat3B);