outMat2d = mat2d.fromRotation(outMat2d, 0.5); outMat2d = mat2d.fromScaling(outMat2d, vec2A); outMat2d = mat2d.fromTranslation(outMat2d, vec2A); outStr = mat2d.str(mat2dA); outVal = mat2d.frob(mat2dA); outMat2d = mat2d.add(outMat2d, mat2dA, mat2dB); outMat2d = mat2d.subtract(outMat2d, mat2dA, mat2dB); outMat2d = mat2d.sub(outMat2d, mat2dA, mat2dB); outMat2d = mat2d.multiplyScalar (outMat2d, mat2dA, 2); 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);
public setUniforms( projectionMatrix: mat4, modelViewMatrix: mat4, modelMatrix: mat4, camera?: PerspectiveCamera | OrthographicCamera ) { gl = GL.get(); // Update the other uniforms Object.keys(this.customUniforms).forEach(uniformName => { const uniform = this.uniforms[uniformName]; switch (uniform.type) { case 't': { gl.uniform1i(uniform.location, uniform.textureIndex); gl.activeTexture(uniform.activeTexture); gl.bindTexture(gl.TEXTURE_2D, uniform.value); break; } case 'tc': { gl.uniform1i(uniform.location, uniform.textureIndex); gl.activeTexture(uniform.activeTexture); gl.bindTexture(gl.TEXTURE_CUBE_MAP, uniform.value); break; } case 't3d': { if (gl instanceof WebGL2RenderingContext) { gl.uniform1i(uniform.location, uniform.textureIndex); gl.activeTexture(uniform.activeTexture); gl.bindTexture(gl.TEXTURE_3D, uniform.value); } break; } case 'i': { gl.uniform1i(uniform.location, uniform.value); break; } case 'f': { gl.uniform1f(uniform.location, uniform.value); break; } case '2f': { gl.uniform2f(uniform.location, uniform.value[0], uniform.value[1]); break; } case '3f': { gl.uniform3f( uniform.location, uniform.value[0], uniform.value[1], uniform.value[2] ); break; } case '4f': { gl.uniform4f( uniform.location, uniform.value[0], uniform.value[1], uniform.value[2], uniform.value[3] ); break; } case '1iv': { gl.uniform1iv(uniform.location, uniform.value); break; } case '2iv': { gl.uniform2iv(uniform.location, uniform.value); break; } case '1fv': { gl.uniform1fv(uniform.location, uniform.value); break; } case '2fv': { gl.uniform2fv(uniform.location, uniform.value); break; } case '3fv': { gl.uniform3fv(uniform.location, uniform.value); break; } case '4fv': { gl.uniform4fv(uniform.location, uniform.value); break; } case 'Matrix3fv': { gl.uniformMatrix3fv(uniform.location, false, uniform.value); break; } case 'Matrix4fv': { gl.uniformMatrix4fv(uniform.location, false, uniform.value); break; } default: } }); if (!GL.webgl2) { gl.uniformMatrix4fv( this.uniforms.uProjectionMatrix.location, false, projectionMatrix ); } gl.uniformMatrix4fv( this.uniforms.uModelViewMatrix.location, false, modelViewMatrix ); gl.uniformMatrix4fv( this.uniforms.uModelMatrix.location, false, modelMatrix ); mat4.identity(inversedModelViewMatrix); mat4.invert(inversedModelViewMatrix, modelMatrix); mat3.identity(normalMatrix); mat3.fromMat4(normalMatrix, inversedModelViewMatrix); mat3.transpose(normalMatrix, normalMatrix); gl.uniformMatrix3fv( this.uniforms.uNormalMatrix.location, false, normalMatrix ); // uDiffuse gl.uniform3f( this.uniforms.uDiffuse.location, this.uniforms.uDiffuse.value[0], this.uniforms.uDiffuse.value[1], this.uniforms.uDiffuse.value[2] ); // Camera if (camera && this.uniforms.uCameraPosition) { gl.uniform3f( this.uniforms.uCameraPosition.location, camera.position.v[0], camera.position.v[1], camera.position.v[2] ); } }