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

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

矩阵缩放的数学原理

  • 和平移一样,以同样的原理,也可以理解缩放矩阵
  • 让向量OA基于原点进行缩放
    • x方向上缩放:sx
    • y方向上缩放:sy
    • z方向上缩放:sz
  • 最终得到向量OB


矩阵缩放的应用

  • 比如我要让顶点在x轴向缩放2,y轴向缩放3,轴向缩放4

1 )顶点着色器的核心代码

<script id="vertexShader" type="x-shader/x-vertex">
    attribute vec4 a_Position;
    // 列主序
    mat4 m4 = mat4(
      2.0, 0.0, 0.0, 0.0,
      0.0, 3.0, 0.0, 0.0,
      0.0, 0.0, 4.0, 0.0,
      0.0, 0.0, 0.0, 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 sx = 2.0;
  float sy = 3.0;
  float sz = 4.0;
  // 列主序
  mat4 m4 = mat4(
    sx,  0.0, 0.0, 0.0,
    0.0, sy,  0.0, 0.0,
    0.0, 0.0, sz,  0.0,
    0.0, 0.0, 0.0, 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 建立矩阵对象,并传递给着色器的方法参考之前博文,此处不再赘述
前端领域 jQuery 缩放效果实现方法 本文面向需要为网页元素添加动态缩放效果的前端开发者,重点讲解使用jQuery实现缩放效果的技术原理、代码实现和性能优化策略。涵盖从基础实现到商业项目级解决方案的全链路知识。fill:#333;color:#333;color:#333;fill:none;背景介绍核心原理静态缩放实现动画缩放实现实战案例性能优化应用场景视口(viewport): 用户当前可见的网页区域变换原点(transform-origin): 元素缩放时的基准点,默认为中心硬件加速: 使用GPU渲染动画提升性能的技术。 阅读详情

相关推荐

放缩矩阵的应用

缩放变换是通过缩放矩阵实现的,该矩阵沿各个坐标轴缩放点云中的每个点。在三维空间中,缩放变换可以用一个对角矩阵表示,其中对角元素代表沿各轴的缩放因子。

twnkie的博客 425

计算机图形学【GAMES-101】1、矩阵变换原理Transform(旋转、位移、缩放、正交投影、透视投影)

Lecture3~41 2DTransformations1.1 Linear Transforms线性变换1.2 Scale1.3 Shear1.4 Rotation1.5 Translation2 齐次坐标3 3DTransformations3.1 Scale3.2 Translation3.3 Rotation3.4 四元数4 MVP Transformation4.1 Model Transformation4.2 View Transformation4.3 Projection Transfo

记录值得记录的东西 8781

WebGL 入门与实践

介绍 WebGL 与 CSS 3D 开发的点点滴滴,详细阐述 3D 数学库的实现原理与使用,演示 3D 数学库对于 WebGL 开发和普通网页开发的重要作用,助力每个前端开发者轻松掌握 3D 开发的关键技术。

斌擎科技 1068

OpenGL ES 矩阵变换及其数学原理

矩阵变换及其数学原理 矩阵变换及其数学原理 引子 各种变换 平移矩阵 缩放矩阵 旋转变换 引子 推荐这篇文章线性代数的本质,这篇文章挺不错的,揭示了矩阵和向量的内涵。首先概要性的提一下 向量刻画的是线性空间中的对象。 矩阵刻画的是向量在线性空间中的运动(变换,跃迁),相似矩阵本质上就是同一个线性变换的不同的描述。 在一个线性空间中,选定了一组基,对...

weixin_30437481的博客 427

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

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

weixin_42590539的博客 1246

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

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

qq_28372005的博客 1014

[缩放矩阵]缩放矩阵推导

已知p1(x1,y1,z1)、p0(x0,y0,z0),求p1点基于p0点的缩放矩阵,x、y、z方向缩放因子分别为sX,sY,sZ。 p1基于原点缩放矩阵为,,而实际上是需要p1点基于p0点进行缩放,那么需要再将p0到原点一段坐标恢复过来, 即,需要加偏移[(1-sX)*x0, (1-sY)*y0, (1-sZ)*z0],最后完整矩阵为: ,此矩阵为矩阵乘列向量形式矩阵。 ...

哈市雪花的博客 3661

Centos7.6操作系统安装+Bond配置(600GB磁盘版本)

1.安装前准备工作 准备centos7.6操作系统镜像 CentOS-7-x86_64-DVD-1810.iso 服务器安装一般都是在BMC界面操作,所以安装前需要在BMC界面挂载好操作系统镜像 重启服务器后自动进入安装界面。 华为大数据集群安装操作系统配置

小时光 6013

三维坐标变换原理-平移, 旋转, 缩放

齐次坐标 给定一个二维点(x, y),那么形如(kx, ky, k)的所有三元组就都是等价的,它们就是这个点的齐次坐标(homogeneous)。齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示,是指一个用于投影几何里的坐标系统,如同用于欧氏几何里的笛卡儿坐标一般 矩阵的乘法 矩阵的乘法运算,阮一峰老师写的比较清楚,具体可以看 这里 矩阵的线性变换 矩阵的线性变换就是从一个线性空间 的...

weixin_34306593的博客 5732

Saturn PCB Toolkit V8.02 实战:5分钟完成10A电源路径的走线与过孔通流验证

本文详细介绍了如何使用Saturn PCB Toolkit V8.02快速验证10A电源路径的走线与过孔通流能力。通过实战案例和参数配置指南,帮助工程师解决大电流PCB设计中的温升失控、过孔瓶颈等核心挑战,提升设计效率和可靠性。

weixin_34194829的博客 452

CoppeiaSim(VREP)入门

vrep/CoppeliaSim关节抖动问题原因总结【Coppeliasim|轨迹规划(一)】设置机械臂的关节角时保证机械臂不散架设置机械臂的关节角时保证机械臂不散架。

weixin_50624597的博客 3228

webgl变换矩阵理论详解

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

qq_37987033的博客 2015

(学习笔记)机器人自主导航从零开始第四步———Rviz、Gazebo、Meshlab的安装

一、Rviz的安装 Rviz是一个

qq_59475883的博客 5057

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

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

qq_28372005的博客 1349

如何使用Google Maps API爬取地理数据:详细教程与Python实现

Google Maps API 是一组服务的集合,允许开发者访问地图、地点、路线等地理信息。:将地址转换为地理坐标,或将地理坐标转换为地址。:计算两点之间的行车路线、步行路线等。Places API:获取附近的地点、商店、餐馆等。:计算多个地点之间的距离和时间。在接下来的代码中,我们将结合这些 API,展示如何获取并处理地理数据。本文详细介绍了如何使用 Google Maps API 获取地理数据,涵盖了从地址转经纬度、获取地点详情、计算路线、计算多个地点的距离与时间等多个功能。

2201_76125261的博客 733

基于Transformer的相似度匹配在AI原生应用中的实现

在AI原生应用(完全基于AI能力构建的应用,如ChatGPT、Notion AI)中,“理解文本之间的相似性”是核心需求:智能搜索需要找到与用户查询最匹配的文档,推荐系统需要挖掘用户兴趣与内容的关联,对话机器人需要识别用户问题的意图是否重复……本文将聚焦“基于Transformer的相似度匹配”,覆盖技术原理、代码实现、应用场景三大模块,帮助开发者掌握从理论到落地的完整链路。本文将按照“生活场景→核心概念→技术原理→代码实战→应用案例→未来趋势”的逻辑展开。

AI 原生应用开发的博客 984

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

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

weixin_30701575的博客 437

[ vulhub漏洞复现篇 ] ActiveMQ反序列化漏洞复现(CVE-2015-5254)

Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列化的类。......

qq_51577576的博客 4445

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

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

weixin_30730053的博客 144

《备考系统分析师》 - 专栏介绍和目录

本专栏提供软考高级系统分析师全套备考资料,包含四大核心内容:1.详细考点梳理(覆盖基础知识、关键技术、案例实践三大模块16个章节);2.历年真题及解析(2009-2022年所有真题含综合知识、案例分析和论文);3.100+篇高质量论文范文;4.预测模拟题。早鸟价仅需9.9元,可节约80%资料搜集时间,帮助考生高效备考、顺利通过考试。专栏持续更新,有问题可随时联系作者。

数据知道的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

sword99 934

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【《WebGL编程指南》读书笔记】

《WebGL编程指南》读书笔记-总纲

floating_heart的博客 826

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WebGL自学笔记第四天

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

梦近在咫尺的博客 230

从零实现3D旋转与缩放,Python视角控制实战案例详解

掌握Python 3D视角控制的核心技巧,从零实现3D模型的旋转与缩放。适用于游戏开发、数据可视化等场景,基于Matplotlib和NumPy实现实时交互控制,代码简洁易懂。提升三维交互体验,值得收藏。

DeepLens的博客 749

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

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

weixin_30896825的博客 474

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

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

所学所思 455
上一篇: WebGL笔记:矩阵平移的数学原理和实现
下一篇: WebGL笔记:js中矩阵库的使用
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、付费专栏及课程。

余额充值