当前位置: 首页 > news >正文

WebGl 使用平行矩阵实现图像平移

1. 平行矩阵原理

平行矩阵,也称为平移矩阵,是一种在二维或三维空间中应用平移变换的矩阵。平移矩阵的作用是将空间中的每个点沿着一定的方向移动固定的距离,而不改变点之间的相对位置和距离。

在三维空间中,平移矩阵的形式为

| 1  0  0  0 |
| 0  1  0  0 |
| 0  0  1  0 |
| x  y  z  1 |

2. 实现步骤

2.1 创建平移矩阵

function getTranslateMatrix(x = 0, y = 0, z = 0) {return new Float32Array([1.0, 0.0, 0.0, 0.0,0.0, 1.0, 0.0, 0.0,0.0, 0.0, 1.0, 0.0,x,   y,   z,   1,])
}

2.2 设置着色器

// 顶点着色器代码 
attribute vec4 aPosition;
uniform mat4 mat;
void main() {gl_Position = mat * aPosition;
}

在顶点着色器中,我们定义了一个uniform变量mat,用来接收平移矩阵。

2.3 传递矩阵

uniformMatrix4fv用于设置着色器程序中的统一矩阵(uniform matrix)变量。这个函数允许开发者将一个4x4的浮点矩阵传递给顶点着色器或片段着色器中的矩阵属性。这个矩阵可以用于多种变换,包括平移、旋转和缩放。

gl.uniformMatrix4fv(location, transpose, array);

  • ocation:指定 uniform 变量的存储位置。
  • transpose:在 webgl 中恒为false。
  • array:矩阵数组。
// 平行矩阵赋值
const matrix = getTranslateMatrix(x)
// 将平移矩阵传递给着色器
gl.uniformMatrix4fv(mat, false, matrix);

2.4 渲染场景

// 图形平移
let x = 1;
function animation() {x += 0.01;if (x > 1) {x = -1;}// 平行矩阵赋值const matrix = getTranslateMatrix(x)// 将平移矩阵传递给着色器gl.uniformMatrix4fv(mat, false, matrix);gl.drawArrays(gl.TRIANGLES, 0, 3);// 实现流畅的动画效果requestAnimationFrame(animation);
}
animation();

3.效果如下:


http://www.mrgr.cn/news/56029.html

相关文章:

  • Go 1.19.4 命令调用、日志、包管理、反射-Day 17
  • QTableWidget如何在header中添加一个复选框(含源码)
  • Qt中的Base64编码
  • nodejs 实现docker 精简可视化控制
  • python+大数据+基于热门视频的数据分析研究【内含源码+文档+部署教程】
  • ChatTTS在Windows电脑的本地部署与远程生成音频详细实战指南
  • 浪潮云启操作系统(InLinux)bcache缓存实践:理解OpenStack环境下虚拟机卷、Ceph OSD、bcache设备之间的映射关系
  • 太极0.5
  • 如何开发电商平台?直播带货系统源码的核心技术解析
  • 基于SSM网络在线考试系统的设计
  • CentOS7上下载安装 Docker Compose
  • R语言机器学习算法实战系列(六)K-邻近算法 (K-Nearest Neighbors)
  • 解决:Cannot find bean with qualifier ‘xxx‘
  • GSM850分几个Channel,为什么这样分?
  • 多品牌NVR管理工具/设备EasyNVR多个NVR同时管理实现技术赋能车载监控行业
  • 大范围实景三维智能调色 | 模方自动化匀色解决方案
  • 【Linux】文件IO深度解析:文件描述符与重定向的奥秘
  • 人工智能的时代,用好这些AI工具,闲暇时间月入过万不是梦!
  • 【AIGC】ChatGPT提示词Prompt精确控制指南:Sam Altman与Ilya Sutskever的建议详解
  • 动态规划——石子合并问题
  • C++加密解密问题解惑答疑
  • 赢得3K下载!专为RAG打造的数据清洗利器
  • 【sshpass】sshpass安装使用
  • 企业文件怎么管控?这几个软件你一定要知道!
  • DBeaver + Oracle 数据库修改CLOB类型字段内容
  • 梦熊 CSP—S模拟赛 T2youyou不喜欢夏天