WebGL笔记:矩阵平移的数学原理和实现

WebGL三维可视化核心:正射投影与透视投影矩阵从原理到实战 在三维图形渲染与工程可视化领域,将三维世界映射到二维屏幕离不开投影变换。正射投影通过平行光线保持物体尺寸绝对精确,适用于CAD、GIS等对比例要求严格的场景;透视投影则模拟人眼近大远小的视觉特性,广泛用于游戏、漫游等沉浸式应用。投影矩阵借助齐次坐标将视图空间变换至裁剪空间,其中透视除法是透视效果的关键,而深度缓冲区的精度分布则直接影响渲染质量,易引发z-fighting等常见问题。理解两种投影的数学本质、参数含义与代码实现,是进行WebGL或Three.js开发、排查渲染异常、实现精确拾取与平滑相机切换的重 阅读详情

矩阵平移的数学原理

  • 让向量OA位移
    • x方向,tx
    • y方向,ty
    • z方向,tz
  • 最终得到向量OB


矩阵平移的应用

  • 再比如我要让顶点的x移动0.1,y移动0.2,z移动0.3

1 )顶点着色器核心代码

<script id="vertexShader" type="x-shader/x-vertex">
    attribute vec4 a_Position;
    // 列主序
    mat4 m4 = mat4(
      1.0, 0.0, 0.0, 0.0,
      0.0, 1.0, 0.0, 0.0,
      0.0, 0.0, 1.0, 0.0,
      0.1, 0.2, 0.3, 1.0
    );
    void main() {
      gl_Position = m4 * a_Position;
    }
</script>

2 )完整代码

<canvas id="canvas"></canvas>
<script id="vertexShader" type="x-shader/x-vertex">
  attribute vec4 a_Position;
  float tx = 0.4;
  float ty = 0.3;
  float tz = 0.2;
  // 列主序
  mat4 m4 = mat4(
    1.0, 0.0, 0.0, 0.0,
    0.0, 1.0, 0.0, 0.0,
    0.0, 0.0, 1.0, 0.0,
    tx,  ty,  tz,  1.0
  );
  void main() {
    gl_Position = m4 * 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';

  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);

  gl.clearColor(0.0, 0.0, 0.0, 1.0);
  gl.clear(gl.COLOR_BUFFER_BIT);
  gl.drawArrays(gl.TRIANGLES, 0, 3);
</script>
  • 使用 js 建立矩阵对象,并传递给着色器的方法参考之前博文,此处不再赘述
WebGL 入门与实践 介绍 WebGL 与 CSS 3D 开发的点点滴滴,详细阐述 3D 数学库的实现原理与使用,演示 3D 数学库对于 WebGL 开发和普通网页开发的重要作用,助力每个前端开发者轻松掌握 3D 开发的关键技术。 阅读详情

相关推荐

WebGL长方体动态变换项目:旋转与缩放

WebGL(Web Graphics Library)是一种JavaScript API,它提供了一个用于在任何兼容的Web浏览器中无需插件就可以进行3D和2D图形渲染的标准方式。它将OpenGL ES 2.0的标准应用到了网页中,使得开发者能够在网页上绘制出复杂的图形。在现实世界中,要观察一个物体,需要一个相机或眼睛作为观察的起点。在WebGL中,虚拟相机用于定义观察世界的方式,它包含位置、朝向和视野范围等属性。虚拟相机的重要性在于,它决定了用户的观察视角,影响了3D场景的视觉效果和用户的交互体验。

weixin_42590539的博客 1246

WebGL笔记:矩阵缩放的数学原理和实现

矩阵缩放的数学原理和应用

Wang的专栏 410

WebGL基础教程(十四):投影矩阵深度解析——正交 vs 透视,从公式推导到实战

投影矩阵是 WebGL 3D 渲染的最后一步,决定了视觉效果是“近大远小”还是“保持真实大小”。透视投影通过透视除法和平截头体实现景深,正交投影通过线性映射和长方体实现精确尺寸。从公式推导可以看出,两者本质区别在于是否引入与 z 相关的除法,这也决定了它们完全不同的视觉特性。参数调试时,near/far 的比值是影响深度精度的关键,fov和分别控制视野范围。9.完整代码,关注后可以下载。💡 下期预告投影矩阵学完,MVP 矩阵就完整了!下期我们将深入光照模型。

qq_28372005的博客 1014

webgl变换矩阵理论详解

在webgl中将图形进行平移、旋转、缩放等操作时可以在着色器中使用数学表达式来操作,但是这样并不是最好的方式,当进行的变换比较复杂,如“旋转后平移再缩放”这样的场景,每次都要先重新计算表达式,然后在着色器中去更改它,这样很不方便,因此,出现了另一种数学手段——变换矩阵,变换矩阵非常适合处理计算机图形。本文对变换矩阵的理论进行讲解。矩阵运算、矩阵变换的一般规则变换矩阵进行图形变换实例。

qq_37987033的博客 2015

520浪漫3D动态相册实现:HTML5与WebGL技术结合

随着网页设计的发展,设计师们不再满足于传统的二维视觉效果,开始寻求更为丰富和动态的用户体验。CSS3中的3D变换技术正是在这样的背景下产生的,它为开发者提供了在不离开浏览器环境的情况下创建三维效果的可能。这种技术使设计师可以利用平滑的过渡、旋转和倾斜等手段,让网页内容呈现出立体的、动态的视觉效果。3D变换不仅限于图像或简单元素,它还可以应用于容器、文本以及其他复杂的HTML结构。通过调整变换中心点、定义透视角度以及设置变换的持续时间和路径,开发者能够创造出既美观又实用的动画效果。

weixin_42551310的博客 918

五子棋小游戏,可联机,单机

五子棋小游戏,可联机,单机

WebGL基础教程(十三) :玩转矩阵,从 0 到 1 玩转 3D 动画(新手也能秒懂矩阵变换)

WebGL 动画的本质:CPU 端构建 4x4 变换矩阵 → 传递给着色器 → GPU 执行「矩阵 × 顶点坐标」计算新位置三大基础变换矩阵:平移:第四列前三个元素为平移量(tx/ty/tz)旋转:左上角 2x2 矩阵为 cosθ/sinθ 组合(绕 Z 轴)缩放:对角线上的元素为缩放因子(sx/sy/sz)实战技巧:用 gl-matrix 库简化矩阵操作,严格遵守「缩放→旋转→平移」的复合变换顺序,注意矩阵乘法无交换律。

qq_28372005的博客 1349

如何用Deep OC-SORT提升多目标跟踪精度?实战配置与性能优化指南

本文是一份针对开发者的Deep OC-SORT多目标跟踪实战指南。详细解析了如何通过部署其核心的“动态外观记忆”与“相机防抖”模块来有效应对遮挡与抖动,从而显著提升跟踪精度与连续性。内容涵盖从环境搭建、参数调优到性能压榨的全流程,并提供针对不同场景的配置建议与工程落地技巧。

f9g0h的博客 670

【ThreeJs原理解析】第2期 | 旋转、平移、缩放实现原理

Three.js中的物体变换(平移、旋转、缩放)本质是通过矩阵运算实现的。平移通过修改模型矩阵的第四列分量,旋转通过左上角3×3矩阵的正余弦值构造,缩放则直接调整基向量长度。Three.js源码中,translate()、rotate()等方法最终都会调用applyMatrix4将变换矩阵与当前模型矩阵相乘,完成复合变换。矩阵运算的顺序决定了最终效果,Three.js默认采用列主序存储方式,与线性代数中的行主序互为转置关系。理解矩阵变换原理,可以更灵活地控制物体运动。

sword99 934

PyTorch实战:手把手教你用QAT量化感知训练拯救模型精度(附避坑指南)

本文详细介绍了如何使用PyTorch进行QAT量化感知训练,以提升模型在边缘设备上的推理精度。通过核心原理讲解、实战代码示例和避坑指南,帮助开发者掌握从环境配置、模型训练到边缘部署的全流程,有效解决传统量化方法导致的精度损失问题。

c7d8e的博客 330

STM32F407ZGT6开发板跑马灯实战:从原理图到烧录全流程(附FlyMcu配置)

本文以正点原子F4探索者开发板(STM32F407ZGT6)为例,手把手指导完成跑马灯实验。内容涵盖从原理图解读、GPIO驱动逻辑分析、HAL库工程搭建,到代码编写与FlyMcu串口烧录配置的全流程,帮助嵌入式开发新手快速实现第一个LED控制程序,打通软硬件开发链路。

weixin_29183637的博客 223

WebGL 3D变换基础:从平移、缩放到旋转

3D图形变换是计算机图形学的核心概念,通过改变物体在三维空间中的位置、大小和方向来实现动态效果。其基本原理包括平移(改变位置)、缩放(改变大小)和旋转(改变方向)。在WebGL等图形编程中,这些变换通常使用矩阵运算实现,但理解其底层数学原理对调试和优化至关重要。通过直接操作顶点坐标实现基础变换,可以帮助开发者更直观地理解空间变换的本质。实际应用中,这些技术广泛用于游戏开发、三维建模和VR/AR等领域。掌握基础变换原理后,再学习矩阵变换会事半功倍,这也是WebGL和OpenGL等图形API的底层实现方式。

weixin_30701575的博客 437

Python经常遇到导入xlwings就出错,如何解决

Python经常在导入xlwings时遇到错误。有人建议尝试重装或升级xlwings,但这些操作后仍然无法解决导入错误问题。

felix_8的博客 1740

计算机图形学&Web前端笔记-图形平移放缩原理及实现(two.js鼠标事件适用所有渲染)

在two.js中,只提供了svg渲染时的鼠标事件,而canvas和webgl并没有提供,这样就对本人造成了很大的困扰,因此学习了下计算机图形学相关的知识,实现了利用two.js绘图在canvas、svg、webgl渲染方式下,放缩或移动场景,还能使用鼠标对其进行点击交互。 下面先演示下截图: 点击绿色的矩形: 从上面的图可以看出变色了。 下面滚动滚轮及拖动下场景: 同样点击刚刚那个矩形: 还是可以被找到,并且改变颜色。 下面先来说下2d图形中平移和放缩的原理(非常重..

IT1995的博客 1859

deepstream车道线检测自定义插件化,其中要注意pipeline的配置,如果插件位置配置不对,会报input format should be RGBA when using blur-obje

以上代码中,我们先从对象池中获取一个 DsUserMeta 对象,然后使用 get_lane_line_from_frame 函数获取车道线检测结果,并使用 add_lane_line_meta 函数将其添加到 DsUserMeta 对象中。注意,上述代码中的 get_lane_line_from_frame 函数和 add_lane_line_meta 函数需要你自己实现,用于从视频帧中提取车道线检测结果,并将其添加到 DsUserMeta 中。

pvmsmfchcs的博客 690

使用Simulink进行带通滤波器的设计与仿真研究

摘要:本文介绍利用Simulink设计和仿真带通滤波器的方法。通过定义系统需求(保留100-500Hz信号),创建包含多频信号源、加法器和巴特沃斯滤波器的模型,重点展示滤波器频率选择特性。详细步骤包括模块配置、参数设置(中心频率300Hz、带宽400Hz)、信号连接及可视化分析。实验验证了带通滤波器有效提取目标频段信号的能力,为复杂信号处理系统开发提供基础框架。所需工具为MATLAB R2023a和DSPSystemToolbox。

xiaoheshang_123的博客 327

从零构建WebGL投影矩阵:正射与透视的数学原理与代码实现

本文详细解析了WebGL中投影矩阵的数学原理与实现方法,涵盖正射投影和透视投影的核心概念。通过代码示例和矩阵推导,帮助开发者理解如何将三维坐标转换为二维屏幕空间,并提供了性能优化和常见问题排查的实用技巧。

weixin_30730053的博客 144

学Simulink--机器人基础关节控制场景实例:基于Simulink的无刷直流电机(BLDC)关节六步换相位置控制仿真

本文详细介绍了基于Simulink的BLDC六步换相位置控制仿真方法,针对机器人关节的低成本控制需求。重点阐述了霍尔定位、六步换相和位置闭环三大核心原理,通过Simulink建模实现了从霍尔信号处理到位置环控制的全流程。仿真结果表明,该系统可实现0.3°的定位精度和80ms的响应时间,满足教育机器人等应用场景需求。文章还提供了核心代码模块和参数设置方法,并探讨了转矩脉动抑制、无传感器控制等进阶优化方向,为低成本机器人关节驱动提供了实用解决方案。

amy_mhd的博客 154

WebGL自学笔记第四天

变换/仿射变换 主要是一些数学知识 平移 对顶点的分量上加上平移的距离 逐顶点操作,所以需要操作顶点着色器 旋转 旋转轴 旋转方向 旋转角度 一般旋转角度与旋转方向会合并成一个参数,旋转角度为正代表逆时针,为负代表正时针。 假设旋转角度为β\betaβ,则坐标点表达式为 rX = xcosβ\betaβ - ysinβ\betaβ; ry = xsinβ\betaβ + ycosβ\betaβ; 变换矩阵 三维图形学非常重要 常用的矩阵 旋转矩阵 [cosβ−sinβ00sinβcosβ0

梦近在咫尺的博客 230

手把手教你学Simulink实例--基于Simulink的电动汽车无线充电效率优化仿真

​市场规模:2025年全球无线充电市场规模将达$27亿(MarketsandMarkets数据)​技术标准Qi v1.3(最高150W)WiTricity(200W动态功率)ISO 17163(道路车辆无线充电)​节能效果:每kWh充电减少120W损耗(按每天8小时)​成本分析线圈成本:35vs58(传统方案)效率提升带来的续航增加:15km/100km。

xiaoheshang_123的博客 346

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

webgl入门实例-11WebGL 视图矩阵 (View Matrix)基本概念

将场景从世界坐标转换到相机(观察者)坐标空间确定相机的观察方向、位置和朝向本质上表示"相机在世界中的位置和方向"

mkbbreak的博客 572

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【《WebGL编程指南》读书笔记-进入三维世界(上)】

本文为《WebGL编程指南》读书笔记,第七章进入三维世界的上半部分。 主要要点包括:1.三维的呈现方式:视点、观察点、视线和上方向;2.WebGL可视空间与投影操作,使用盒状可视空间和正射投影进行简单绘图,对正射投影矩阵的数学原理进行了本书之外的补充;3. 透视投影可视空间、投影矩阵和模型视图投影矩阵的相关操作,提及规范立方体。

floating_heart的博客 943

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

别再死记硬背MVP矩阵了!用WebGL/Three.js亲手推导一遍模型、视图、投影变换

本文通过Three.js实战演示,深入解析计算机图形学中的模型、视图和投影变换矩阵(MVP矩阵)原理。从搭建实验环境到手动推导每个变换矩阵,结合可视化调试工具,帮助开发者直观理解WebGL图形变换的核心机制,摆脱死记硬背公式的学习方式。

weixin_30896825的博客 474

WebGL图形编程实战【7】:变换流水线 × 坐标系与矩阵精讲

本文深入探讨了WebGL图形编程中的变换流水线,详细介绍了从局部坐标系到屏幕坐标系的转换过程,包括模型变换、视图变换、投影变换等。文章通过Mermaid流程图清晰展示了各坐标系之间的转换关系,并对齐次坐标、不同方式的图形变换(平移、旋转、缩放)进行了详细讲解。此外,还介绍了视图变换的公式推导、案例,以及第一人称和第三人称视角的实现。最后,对投影变换、NDC变换和视口变换进行了公式推导和案例展示,帮助读者深入理解WebGL图形编程中的变换机制。

共勉 1606

snabbt.js矩阵运算原理:深入理解CSS 3D变换的数学基础

snabbt.js是一个极简主义的JavaScript动画库,专门用于实现快速的CSS 3D变换动画效果。这个库的核心在于其高效的矩阵运算系统,通过数学计算为网页元素添加生动的3D动画效果。本文将深入解析snabbt.js的矩阵运算原理,帮助您理解CSS 3D变换背后的数学基础。 [![snabbt.js矩阵运算示意图](https://raw.gitcode.com/gh_mirrors/sn

gitblog_00668的博客 888

15、webgl 基本概念 + 恰似一阵春风吹过水面

本文介绍了WebGL中矩阵的基本概念与应用。矩阵是复数(实数、虚数)的矩形排列集合,在图形变换中起重要作用。文章展示了在着色器中创建二阶矩阵实现旋转效果的方法,包括通过JavaScript传递矩阵对象给着色器。示例代码演示了如何使用mat2矩阵实现三角形旋转动画。最后提到四阶矩阵(mat4)也可用于旋转操作,其原理与二阶矩阵类似,但能处理更高维度的变换。这些技术是WebGL图形编程的基础,可用于实现各种2D/3D图形变换效果。

所学所思 456
上一篇: WebGL笔记:矩阵旋转运算的原理和实现
下一篇: WebGL笔记:矩阵缩放的数学原理和实现
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、付费专栏及课程。

余额充值