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

2023-12-05

矩阵缩放的数学原理

  • 和平移一样,以同样的原理,也可以理解缩放矩阵
  • 让向量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 建立矩阵对象,并传递给着色器的方法参考之前博文,此处不再赘述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 纯 WebGL 虚线

    我正在尝试使用纯 webgl 创建一条虚线 我知道已经有一个问题了 也许我很蠢 但我不知道如何让它发挥作用 我理解这个概念 但我不知道如何获取着色器中沿路径的距离 之前的答案有以下一行 varying float LengthSoFar l
  • 使用画布(三.js)覆盖画布(WebGL)

    我有两块画布 第一个应该是背景 其内容通过原始 WebGL 3D 渲染 第二个画布应该覆盖第一个画布 并且主要是透明的 它的内容通过 Three js 3D 内容 呈现 不幸的是 第二个画布不是绘制在第一个画布的上面 而是绘制在它的旁边 如
  • 是否可以使用 WebGL 运行 #version 120 着色器

    我有许多 GLSL 片段着色器 我几乎可以保证它们符合 version 120它们使用标准的 不符合 ES 的值 并且没有任何 ES 特定的编译指示 我真的很想使用 WebGL 为他们制作一个网页预览器 预览器不会在移动设备上使用 这可行吗
  • webgl 中的多个对象

    我正在尝试将一些对象渲染到画布上 但我在理解哪些内容不起作用时遇到了一些困难 我目前正在构建两个对象 它们代表我想要渲染的两个网格 如果我创建一个网格 代码可以正常工作 所以我认为问题在于 当我构建两个或更多网格时 数据会被搞砸 这是网格数
  • 如何在 GLSL / WebGL 中将 1 个 32 位整数打包为 4 个 8 位整数?

    我正在寻求并行化一些复杂的数学 而 WebGL 看起来是实现这一目标的完美方法 问题是 您只能从纹理中读取 8 位整数 理想情况下 我希望从纹理中获取 32 位数字 我的想法是使用 4 个颜色通道来获得每像素 32 位 而不是 4 乘以 8
  • 为 webgl 中的每个对象使用不同的顶点和片段着色器

    我在 webgl 中有一个包含多个对象的场景 对于每个对象 我想使用不同的顶点和片段着色器 我的第一个问题是 是否可以为每个对象都有一个着色器 我知道在 opengl 中这是可能的 这是与我的想法类似的伪代码 任何例子将不胜感激 glena
  • 为什么 WebGL 比 Canvas 更快?

    如果两者都使用硬件加速 GPU 来执行代码 为什么 WebGL 比 Canvas 更快 我的意思是 我想知道为什么在低级别上 从代码到处理器的链条 会发生什么 Canvas WebGL 直接与驱动程序通信 然后与显卡通信 Canvas 速度
  • 用于渲染视频的 2d 上下文与 WebGL

    我目前正在使用CanvasRenderingContext2D drawImage 将来自 RTC 媒体流的视频绘制到画布上 不幸的是 这会占用大量的 CPU 资源 使用以下方法执行此操作会性能更高吗WebGLRenderingContex
  • 如何在 UWP 上的 Xamarin.Forms WebView 中启用 WebGL?

    我是 Xamarin Forms 新手 尝试在 Windows 10 x64 v1803 计算机上使用 UWP 使用 WebView 但我不知道如何让它与 WebGL 一起使用 使用 WebGL 的网站要么显示一条消息 您的视频卡不支持 W
  • WebGL:如何使对象的一部分透明?

    我在浏览器中有一个 3D 球 现在我想在它上面挖一个洞以查看它的背面 我怎样才能使它成为可能 例如 我希望立方体的白色三角形部分可以是透明的 我的意思是我们可以看到立方体后面的背景 我尝试更改片段着色器中的 alpha 代码中的区域是正方形
  • int gl_VertexID 导致 Three.js 出错

    我一直在使用内置顶点索引的 gl VertexID 时遇到问题 通过使用in 与 Three js 一起使用 我不知道为什么 因为文档说它适用于所有版本的 OpenGL http www opengl org sdk docs mangls
  • 为什么此 WebGL 帧缓冲区使用会抛出 FRAMEBUFFER_UNSUPPORTED?

    我正在尝试创建一个 WebGL 选择缓冲区 有人能看到我在这里做错了什么吗 我在 Mozilla 5 0 X11 Linux x86 64 rv 2 0b3pre Gecko 20100724 Minefield 4 0b3pre 和 Ch
  • 三个 js - 克隆着色器并更改统一值

    我正在努力创建一个着色器来生成带有阴影的地形 我的出发点是克隆兰伯特着色器并使用 ShaderMaterial 最终用我自己的脚本对其进行自定义 标准方法效果很好 var material new MeshLambertMaterial m
  • Three.js 使用 WebRTC 并应用 Shader

    我不知道如何将着色器应用于具有视频纹理的 Three js 对象 我一直在使用 webRTC 和 Three js 并使用标准材质成功将视频纹理映射到网格上 var material new THREE MeshBasicMaterial
  • 为什么我不能使用uniform1f而不是uniform4f来设置vec4制服?

    我通过以下方式逐步学习WebGL这本书 https sites google com site webglbook 我尝试通过使用缓冲区来绘制三个点 gl ARRAY BUFFER 而不是循环 正如我之前在本书的其他示例中所做的那样 var
  • 在 Fabric.js 中真正旋转等边三角形的中心

    使用 Fabric js 我无法真正围绕其中心点旋转三角形 或者至少我认为应该是中心点 我创建了一个jsFiddle http jsfiddle net UW8Be 这表明 三角形很简单 我用了originX center 原点Y 也是如此
  • 3D 图形矩阵 4x4 中最后一行的 magic 4 的用途是什么?

    当我阅读有关WebGL的书时 我看到了下一个矩阵描述 有关于书中最后一行的信息 WebGL 初学者指南 初学者指南 Diego Cantor Brandon Jones 神秘的第四排 第四排没有任何特殊之处 意义 元素 m4 m8 m12
  • 在 Three.js 中渲染具有大量对象的多个场景的最佳方式

    想象一下 您想要绘制两个场景 每个场景都有数百个球体 并提供在这些场景之间切换的功能 做到这一点的最佳方法是什么 目前 一个开关大约需要 4 到 5 秒 因为我要删除 创建和绘制每个开关上的所有球体 下面是在场景切换上运行的代码示例 cle
  • 解决 Three.js / webGL 中的 gl_PointSize 限制

    我正在使用 Three js 创建交互式数据可视化 此可视化涉及渲染 68000 个节点 其中每个不同的节点具有不同的大小和颜色 最初我尝试通过渲染网格来实现此目的 但事实证明这非常昂贵 我当前的尝试是使用 Three js 粒子系统 每个
  • webgl中绑定缓冲区的逻辑是什么?

    有时我发现自己在以不同顺序声明缓冲区 使用 createBuffer bindBuffer bufferdata 和在代码的其他部分 通常在绘制循环中 重新绑定它们之间挣扎 如果我在绘制数组之前不重新绑定顶点缓冲区 控制台会抱怨尝试访问超出

随机推荐

  • python爬虫数据采集

    近几年来 python的热度一直特别火 大学期间 也进行了一番深入学习 毕业后也曾试图把python作为自己的职业方向 虽然没有如愿成为一名python工程师 但掌握了python 也让我现如今的工作开展和职业发展更加得心应手 这篇文章主要
  • 美国国防部采办中的ChatGPT:高级语言模型的机遇和风险

    随着人工智能的不断进步 像 ChatGPT 这样的大型语言模型有可能彻底改变国防采购和合同签订的方式 由于语言模型能够生成类似人类的文本 因此可以自动完成采购中的许多重复而耗时的任务 如文件准备 研究和沟通 与任何新技术一样 国防工业采用大
  • MySQL 8.0 压缩版安装教程

    1 下载mysql压缩包 2 解压文件 我这里把压缩包解压到E盘的根目录 3 配置系统环境变量 为了让Windows系统可以识别我们这里后面会用到的MySQL命令 需要给当前系统添加环境变量 我的电脑 右键 gt 属性 gt 高级系统设置
  • 轻量应用服务器小程序部署可以吗?

    轻量应用服务器是指提供了一定的并发能力 等功能的云服务器 它可以实现对网站 小程序提供高效 安全的技术支持 而小程序则是一种新的开放能力 不仅具有出色的使用体验 还可以在微信内被便捷地获取 为用户提供便利的服务 原文地址 轻量应用服务器小程
  • 浅析Hotspot的经典7种垃圾收集器原理特点与组合搭配

    浅析Hotspot的经典7种垃圾收集器原理特点与组合搭配 HotSpot共有7种垃圾收集器 3个新生代垃圾收集器 3个老年代垃圾收集器 以及G1 一共构成7种可供选择的垃圾收集器组合 新生代与老年代垃圾收集器之间形成6种组合 每个新生代垃圾
  • WebGL笔记:图形缩放的原理和实现

    缩放 1 原理 缩放可以理解为对向量长度的改变 或者对向量坐标分量的同步缩放 如下图 比如 让向量OA 收缩到点B的位置 也就是从OA变成OB 缩放了一半 2 公式 已知 点A的位置是 ax ay az 点A基于原点內缩了一半 求 点A內缩
  • Tomcat 配合虚拟线程,一种新的编程体验

    Java 21 在今年早些时候的 9 月 19 日就正式发布 并开始正式引入虚拟线程 但是作为 Java 开发生态中老大哥 Spring 并没有立即跟进 而是在等待了两个月后的 11 月 29 日 伴随着 Spring Boot 3 2 版
  • leetcode:468. 验证IP地址

    验证IP地址 中等 249 相关企业 给定一个字符串 queryIP 如果是有效的 IPv4 地址 返回 IPv4 如果是有效的 IPv6 地址 返回 IPv6 如果不是上述类型的 IP 地址 返回 Neither 有效的IPv4地址 是
  • 《许犁庭与柔性世界》第三十章 出云,乘雷与君影

    再次回到校园 伴随着老师舒缓的节奏 徜徉在大大小小 深浅不一的草垛间 头顶碧空如洗 脚底金蕊盖霜 四周稻色黄莽 远处绿黛青芒 境与心会 便欲驭风跨蜿虹 1 若不是老师一把拉住 许犁庭估计会一头撞到前方那澹烟笼罩的巨树上 呵呵 第一次进入伊拉
  • 如何更好地平衡工作和生活?从实际出发

    在当今快节奏的生活中 平衡工作和生活的重要性越来越受到人们的关注 工作和生活是相辅相成的 只有通过良好的平衡 我们才能在工作和生活中获得最佳的状态和体验 然而 如何更好地平衡工作和生活呢 下面将介绍一些实用的方法 一 制定合理的时间表 制定
  • 某音订单接口在电商行业中的重要性及实践应用

    一 引言 随着移动互联网的快速发展 短视频平台抖音已经成为人们日常生活中不可或缺的一部分 越来越多的商家开始利用抖音平台推广和销售商品 从而实现商业变现 在这个过程中 抖音订单接口起到了至关重要的作用 本文将详细探讨抖音订单接口在电商行业中
  • 利用FileZilla下载PHOENIX高分辨率光谱

    下载PHOENIX光谱 在诸如CCF SED拟合中经常需要下载模板光谱 因此有一些大牛提供了相关的光谱库供大家使用 例如 Gottingen Spectral Libary by PHOENIX 论文 A new extensive lib
  • Node.js爬虫实战:搜狗图片爬取

    说在前面 当我们在网上寻找图片时 经常会遇到需要批量下载搜索结果中的图片的情况 而搜狗作为中国颇具影响力的搜索引擎之一 其图片搜索功能提供了丰富多样的图片资源 在这种情况下 我们希望能够通过编程的方式 批量下载搜狗图片搜索结果中的图片 以便
  • 数字化转型的引擎:企业与消费者同步变革

    数字化转型的引擎 企业与消费者同步变革 随着科技的飞速发展 数字化转型已成为企业生存和发展的必然选择 在这个过程中 企业和消费者都面临着巨大的变革和挑战 本文将探讨数字化转型的推动力 以及企业和消费者如何应对这些变革 一 数字化转型的推动力
  • VLAN实验

    题目要求 1 PC1和PC3所在接口为Access接口 2 PC2 4 5 6处于同一网段 其中PC2可以访问PC4 5 6 PC4可以访问PC5 但不能访问PC6 PC5不能访问PC6 3 PC1 3与PC2 4 5 6不在同一网段 4
  • 编译tzdata提示内存越界 malloc(): memory corruption /bin/sh: line 1: 32317 Aborted

    编译tzdata时 遇到如下所示的错误提示 awk v outfile main zi f ziguard awk africa antarctica asia australasia europe northamerica southam
  • 图片转表格软件有哪些?进来马上给你揭晓

    在整理资料的时候 你或多或少都会遇到一些图片格式的表格 需要你手动输入文字信息进行整理 然而 如果数据多的话 很容易出错 并且很浪费时间和精力 为了解决这个问题 你可以借助一些工具 来帮助你更高效地处理这种情况 这些工具通常可以将图片中的表
  • Ubuntu20.04使用SVN(Rabbitvcs)

    原文 https blog csdn net u014552102 article details 129914787 1 安装Rabbitvcs sudo apt get install rabbitvcs nautilus sudo r
  • WebGL笔记:js中矩阵库的使用

    矩阵库 手写矩阵 其实很麻烦 可以将其模块化 市面上已经有许多开源的矩阵库 比如 WebGL 编程指南 里的 cuon matrix js three js 的 Matrix3 和 Matrix4 对象 three js的 Matrix4
  • WebGL笔记:矩阵缩放的数学原理和实现

    矩阵缩放的数学原理 和平移一样 以同样的原理 也可以理解缩放矩阵 让向量OA基于原点进行缩放 x方向上缩放 sx y方向上缩放 sy z方向上缩放 sz 最终得到向量OB 矩阵缩放的应用 比如我要让顶点在x轴向缩放2 y轴向缩放3 轴向缩放