WebGL笔记:js中矩阵库的使用

【技术调研】三维(0)-webGL、三维基础知识、前置知识、数学知识以及简单示例 前言 ​ 因业务需要了解网页端三维相关技术,故对webGL相关技术学习并记录。旨在了解网页端三维的基本原理。 什么是webGL? ​ WebGL全称叫做Web Graphics Library,它是JavaScript API。用于在任何兼容的Web浏览器中渲染交互式的3D图形,并且无需使用插件。它基于 OpenGL ES 2.0(一个用于嵌入式系统的图形库),并与其他 Web 标准完全集成,使开发者能够利用 GPU 加速图形处理直接在网页上实现复杂的图形效果。 ​ WebGL可以在网页上开发高性能的3D游 阅读详情

矩阵库

  • 手写矩阵,其实很麻烦,可以将其模块化
  • 市面上已经有许多开源的矩阵库
    • 比如《WebGL 编程指南》里的 cuon-matrix.js
    • three.js 的 Matrix3 和 Matrix4 对象

three.js的 Matrix4 对象的用法

1 )核心代码

  • 1.引入Matrix4对象

    import { Matrix4 } from 'https://unpkg.com/three/build/three.module.js';
    
  • 2.实例化矩阵对象,在其中写入旋转信息

    const matrix = new Matrix4()
    matrix.makeRotationZ(Math.PI/6)
    
  • 3.基于matrix 对象的elements 属性,修改uniform 变量

    const u_Matrix=gl.getUniformLocation(gl.program,'u_Matrix')
    gl.uniformMatrix4fv(u_Matrix,false,matrix.elements)
    

2 )完整代码

<canvas id="canvas"></canvas>
<script id="vertexShader" type="x-shader/x-vertex">
  attribute vec4 a_Position;
  // 列主序
  uniform mat4 u_Matrix;
  void main() {
    gl_Position = u_Matrix * a_Position;
  }
</script>
<script id="fragmentShader" type="x-shader/x-fragment">
  void main() {
    gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
  }
</script>
<script type="module">
  import { initShaders } from './utils.js';
  import { Matrix4 } from 'https://unpkg.com/three/build/three.module.js';

  const canvas = document.getElementById('canvas');
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;
  const gl = canvas.getContext('webgl');

  const vsSource = document.getElementById('vertexShader').innerText;
  const fsSource = document.getElementById('fragmentShader').innerText;
  initShaders(gl, vsSource, fsSource);

  const vertices = new Float32Array([
    0.0, 0.1,
    -0.1, -0.1,
    0.1, -0.1
  ]);

  const vertexBuffer = gl.createBuffer();
  gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
  gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
  const a_Position = gl.getAttribLocation(gl.program, 'a_Position');
  gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 0, 0);
  gl.enableVertexAttribArray(a_Position);

  const u_Matrix = gl.getUniformLocation(gl.program, 'u_Matrix');
  let angle = 0.1;
  const m4 = new Matrix4();
  m4.makeRotationZ(angle);
  gl.uniformMatrix4fv(u_Matrix, false, m4.elements);

  gl.clearColor(0.0, 0.0, 0.0, 1.0);
  gl.clear(gl.COLOR_BUFFER_BIT);
  gl.drawArrays(gl.TRIANGLES, 0, 3);

  !(function animate() {
    angle += 0.05;
    m4.makeRotationZ(angle);
    gl.uniformMatrix4fv(u_Matrix, false, m4.elements);

    gl.clear(gl.COLOR_BUFFER_BIT);
    gl.drawArrays(gl.TRIANGLES, 0, 3);
    requestAnimationFrame(animate);
  })()
</script>
WebGL高级变换与动画基础 例如,通过调用glTranslate()函数并传入在X,Y,Z轴上的平移距离,就可以创建一个平移矩阵。如果旋转角度值是正值,那么旋转就是逆时针方向的,本例中的旋转是绕Z轴进行的,所以旋转轴设为(0,0,1);类似的,如果是绕X轴旋转,则为(1,0,0)。WebGL没有提供类似的矩阵函数,因此,如果想要使用它们,就得自己编写,或使用别人编好的(开源的)。Matrix4是矩阵库提供的新类型,Matrix4对象表示一个4*4的矩阵,该对象内部使用类型化数组Float32Array来存储矩阵的元素。 阅读详情

相关推荐

WebGL开发高效工具库:cuon-matrix、cuon-utils、webgl-debug和webgl-utils

WebGL(Web Graphics Library)是一种在浏览器中渲染3D图形的JavaScript API。它基于OpenGL ES 2.0,允许开发者利用硬件加速直接在网页中绘制复杂的三维场景。由于其跨平台特性,WebGL为网页游戏、虚拟现实等提供了强大的支持。WebGL因其在浏览器中直接操作GPU的能力而成为一个强大而复杂的API。开发WebGL程序的过程中,开发者经常会遇到各种各样的问题,包括但不限于渲染错误、性能瓶颈、内存泄漏以及兼容性问题。

weixin_30923011的博客 600

Matrix 矩阵 JavaScript代码生成器

今天写了个Matrix 矩阵 JavaScript代码生成器,其实几年前就用Python的pygame实现过一个Matrix,最近在玩JavaScript canvas,索性使用JavaScript原生代码又撸了一遍,并且做了个代码生成器,方便修改Matrix的一些参数。

J_Sky:编程爱好者,又菜又爱玩. 1052

jsMatrix:小巧轻便的 Javascript 矩阵库

矩阵 小巧轻便的 Javascript 矩阵库 这主要用于 WebGL 矩阵转换,但将被抽象出来以对 n 大小的矩阵进行矩阵数学运算 要包含在您的项目中:下载 jsMatrix.js,将其添加到您的根目录或 lib/ 文件夹并将适当的脚本标记添加到您的项目页面。 创建一个新的 Matrix4 单位矩阵: $M.Matrix4(); 该库目前允许您: 通过.Translate(x, y, z) 通过.dRotate(degrees)或弧度旋转度数, .rRotate(radians) 通过.Scale(value)缩放 您可以像这样链接这些函数以轻松创建 ModelView Matricies: var matrix = $M . Matrix4 ( ) . dRotate ( 90 ) . Scale ( 0.5 ) . getMatri

5个最流行的JavaScript矩阵计算库

JavaScript 用途广泛,用途广泛,是一种可以应用于各种任务的语言。在处理矩阵计算时,JavaScript 缺乏其他编程语言提供的内置功能。然而,由于生态系统充满活力且开发社区不断发展,有各种库可帮助你有效地管理和操作矩阵。在本文中,我们将探讨五个最佳 JavaScript 矩阵计算库。让我们开始吧。

新缸中之脑 2322

jsMat:小型javascript库,用于矩阵和向量运算

Javascript矩阵库 旨在涵盖我在javascript中所需的所有向量和矩阵运算 优点: 使用方便 方便的抽象 清除代码 缺点: 很多对象创建 表演技巧很少 注意:默认情况下,向量是列向量。行和列索引从1开始 初始化 let r=3,c=3; let rotMat = Matrix(r,c); //special initializations in Mat function M = Mat.rotx(10); //make a rotation matrix about the x-axis that rotates 10 degrees v = Mat.vec(0,1,2); //make a vector, accepts an arbitrary number of objects M = Mat.rotv(10); //make a rotation matrix ab

Matrix.js:JS矩阵

Matrix.js Matrix constructor new Matrix(height, width, init) new Matrix(<MatrixSize>, init) new Matrix(<Array>) new Matrix(<URL>) // 未实现 Methods Matrix.isMatrix(obj) 判断参数是否为矩阵。 Matrix.isSquare(obj) 判断参数是否为方阵。 Matrix.isSameSize(obj1, obj2) 判断obj1和obj2是否尺寸一样。 Matrix.isSameLength() 判断是否总长度一样,即面积一样。 Matrix.isArray(<Array>) 判断传入的Array是否为矩阵。 Matrix.isSame(A, B) 判断每一元素是否一样。 Matrix.isI(<Matrix>) 判断参数是否为单位

webgl入门-矩阵变换

这一篇主要讲解了如何使用矩阵统一变换一个物体的多个顶点,下一篇我们会让矩阵包含多种变换信息,比如移动加旋转,旋转加缩放。

zgynbnbnb的博客 1100

matrix:Javascript中的矩阵运算

矩阵 使用Javascript的功能性质执行基本矩阵运算的Javascript库 用法 var a = [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] var A = matrix ( a ) ; 运作方式 1.身份 A ( ) ; //returns [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 2.行 A ( 0 ) ; // returns [1, 2, 3] 3.专栏 A ( [ ] , 0 ) ; // returns [[1], [4], [7]] 4.元素 A ( 1 , 2 ) ; // returns 6 5.范围 A ( [ 1 , 2 ] ) ; // returns [[4, 5, 6], [7, 8, 9]] A ( [ ] , [ 1 , 2 ] ) ; // returns [[2, 3

【《WebGL编程指南》读书笔记-高级变换与动画基础】

《WebGL编程指南》读书笔记-第四章 高级变换与动画基础。 要点有二:1.使用矩阵库,通过矩阵乘法模拟复杂的变换(模型矩阵);2.通过反复变换和重绘生成动画效果。

floating_heart的博客 532

matrixjs:Node.js 的基本矩阵运算

矩阵js Node.js 的基本矩阵运算

最新 抖音 X-Gorgon 0408 和8408 设备注册协议

抖音app先是检测了你的手机cpu架构,是x86还是armeabi,通过cpu架构的不同来调用so内不同的xg方法,所以导致现在最新版抖音app的xg算法有0408和8408两种。两种都是最新版,因为我发现当我使用oppo手机安装最新版抖音抓包的xg是8408,而当我用小米或者华为安装最新版抖音,抓包以后发现xg是0408。抖音IOS XG84 设备注册激活协议代码片段。...

Q44804487的博客 1万+

5 分钟跑通 Cap:开源录屏工具完整指南,录完即分享、数据归你

录完一个 bug 视频,还得找地方存、压缩、传网盘、复制链接,折腾半天视频还躺在别人服务器上。Cap 是开源 Loom 替代的录屏工具:屏幕、摄像头、麦克风一次采齐,停止即可分享,存哪由你定。 ## 对比同类工具:Cap 的 5 个差异化理由 - **数据主权**:视频不必锁死在官方云里,可接自己的 S3 兼容桶,AWS S3、Cloudflare R2、Backblaze B2、MinIO、

gitblog_00413的博客 237

【多元统计分析】均值向量和协方差阵的检验——spss上机实验

均值向量和协方差阵的检验——spss上机实验 #参考书目为《多元统计分析》(第五版)——何晓群.中国人民大学出版社 #如有错误,请指正!谢谢~ #关注公众号搜索同名文章获取数据~ 习题2.3 现选取内蒙古、广西、贵州、云南、西藏、宁夏、新疆、甘肃和青海等9个内陆边远省区。选取人均GDP、第三产业比重、人均消费支出、人口自然增长率及文盲半文盲人口占15岁以上人口的比例等5项能较好的说明各地区社会经济发展水平的指标,验证边远及少数民族聚居区的社会经济发展水平与全国平均水平间有无显著差异。 将输入导入spss

suansuannainaizi的博客 3万+

[WebGL入门]十,矩阵计算和外部库

从长远来看,真正进行非常复杂的处理时,矩阵的知识还是不能缺少的。但是,要提前把这些都理解是很苦难的。所以,先熟练使用外部库,等能够熟练进行3D开发之后,再逐步了解这些知识是比较理想的。 使用外部库的时候,也可能存在平台问题,必须边理解外部库的特征边使用,并不是说完全没有问题。本网站使用的库是管理人自己的库,会尽可能减低使用的门槛。

lufy小屋 1万+

旋转矩阵推导

推导前提: 坐标使用右手坐标系,角度逆时针旋转为正。 绕X轴旋转角度为 俯仰角 即Pitch 绕Y轴旋转角度为 偏航角 即Yaw(Head) 绕Z轴旋转角度为 翻滚角 即Roll 一、平面二维坐标点的旋转 如右图所示,根据三角函数关系,可以列出向量OP与OP’的坐标表示形式: x = |OP|•cosα x′ = |OP|•cos(α+β) y = |OP|•sinα y′ = |OP|•sin(α+β) 将P′(x′,y′)表达式展开: x′ =

suixinger_lmh的随笔 1384

FLUENT 软件中design modeler网格划分后,导出失败:系统显示“在网格文件导出过程中出现异常。请将数据发送给您的技术支持供应商。”...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1474

webgl1到webgl2_30个令人惊叹的WebGL实验!

看哪,一个拥有美好前景的好工具即将出现。 快速,流畅。 它可以渲染3D,并通过集成进行动画处理,猜猜它是什么? HTML5 ? CSS3 ? 不,它称为WebGL,是一个软件库,可扩展JavaScript的功能以生成交互式3D图形,是的,没有任何插件! 在此展示厅中,我们不想向您展示常规内容。 我们想向您展示30个由专业开发人员精心设计的WebGL实验 ,以让您见证WebGL的真正威力,这...

cune1359的博客 1291

把数字化转型真正落到组织里:读懂 SAP 的 OCM 六维框架

摘要: SAP的变革管理框架(OCM)强调数字化转型不仅是技术任务,更需关注组织与人的适应性。OCM包含六大维度:变革战略(明确方向与风险)、变革领导力(统一关键管理者行动)、变革沟通(分层传递信息)、变革实现(细化岗位级影响)、变革赋能(按角色设计培训)和变革有效性(持续评估)。该框架贯穿项目全周期,尤其在云项目中,需从早期规划变革策略,避免后期高代价调整。OCM的核心是将系统设计转化为组织语言,确保业务真正采纳新方式运作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1437

twgl.js性能优化清单:10个技巧提升WebGL应用渲染效率

twgl.js是一个轻量级的WebGL辅助库,专门帮助开发者简化WebGL编程的复杂性。通过这个完整的性能优化指南,你将学会如何显著提升WebGL应用的渲染效率,无论是基础几何体渲染还是复杂的粒子系统都能获得可观的性能提升。🚀 ## 1️⃣ 优化基础几何体渲染性能 [![twgl.js基础几何体渲染效果](https://raw.gitcode.com/gh_mirrors/tw/twgl.

gitblog_01178的博客 505

Vue3 - Arco Design Vue 表格组件 table 隐藏鼠标移入时 hover 高亮背景色,el-table 组件去除鼠标悬停在表格行的 hover 高亮效果(改变鼠标移入时的背景色)

vue3,arcodesignvue,arcodesign,表格,a-table,hover,表格hover的class类名是什么,class,hover,在arcodesignvue项目中,表格组件如何去掉鼠标移入时的hover效果,vue3arco.design表格组件修改鼠标移入行的背景颜色,table表格,取消表格行row移入高亮效果,去掉鼠标移入行时的hover效果,取消a-table的hover状态,取消高亮显示,隐藏表格鼠标hover效果,去除鼠标触摸变色效果,如何取消arco表

🏆 前端领域优质创作者 3773

数字人接大模型第二步:语音克隆

推荐XTTS-v2项目,由Coqui公司开发的语音生成模型,专为多语言语音克隆和生成设计。它支持17种语言,包括英语、西班牙语、法语、德语、意大利语、葡萄牙语、波兰语、土耳其语、俄罗斯语、荷兰语、捷克语、阿拉伯语、中文、日语、匈牙利语、韩语和印地语。XTTS-v2的核心优势在于其仅需6秒的音频片段即可实现语音克隆,无需大量的训练数据。此外,它还支持情感和风格转移、跨语言语音克隆以及多语言语音生成,采样率高达24kHz。地址:https://github.com/archwesome/XTTS-v2。

404

WEBGL看完你就会了(12)---函数库编写旋转矩阵

一本书上每多一个公式,就会减少一半读者。—霍金。

简单Cere 279

【YOLO11[基础]】分类任务的热力图可视化实践 | 论文必备 | 分类任务 | 即插即用 | 可选GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiR

【YOLO11[基础]】分类任务的热力图可视化实践 | 论文必备 | 分类任务 | 即插即用 | 可选GradCAMPlusPlus, GradCAM, XGradCAM, EigenCAM, HiResCAM, LayerCAM, RandomCAM, EigenGradCAM等

静谧、淡雅 2390

gl-matrix完整教程:5分钟掌握高性能WebGL矩阵计算

在当今的Web图形开发领域,JavaScript已经成为处理实时3D图形和计算密集型任务的核心语言。然而,JavaScript本身并未提供高效的向量和矩阵数学运算能力,这正是gl-matrix库存在的意义所在。 ## 为什么你需要gl-matrix库 随着WebGL技术的普及,开发者面临着在浏览器中实现复杂3D图形渲染的挑战。gl-matrix专为高性能WebGL应用设计,通过精心优化的函数和

gitblog_00933的博客 499

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

TS及webgl学习之路1。

1 <!DOCTYPE html> 2 3 <html lang="en"> 4 <head> 5 <meta charset="utf-8" /> 6 <title>TypeScript HTML App</title> 7 <link rel="sty...

505

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WebGL编程指南 - 高级变换与动画基础

学习使用一个矩阵变换库,该库封装了矩阵运算的数学细节。 快速上手使用该矩阵库,对图形进行复合变换。 在该矩阵库的帮助下,实现简单的动画效果。

zaizai1007的博客 1104

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

上一篇: WebGL笔记:矩阵缩放的数学原理和实现
下一篇: AIGC: 关于ChatGPT中基于API实现一个StreamClient流式客户端
Wang's Blog
博客等级 码龄12年 7438粉丝 2421原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值