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

1. 平行矩阵原理

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

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

javascript 复制代码
| 1  0  0  0 |
| 0  1  0  0 |
| 0  0  1  0 |
| x  y  z  1 |

2. 实现步骤

2.1 创建平移矩阵

javascript 复制代码
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 设置着色器

javascript 复制代码
// 顶点着色器代码 
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:矩阵数组。
javascript 复制代码
// 平行矩阵赋值
const matrix = getTranslateMatrix(x)
// 将平移矩阵传递给着色器
gl.uniformMatrix4fv(mat, false, matrix);

2.4 渲染场景

javascript 复制代码
// 图形平移
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.效果如下:

相关推荐
@ V:ZwaitY092 小时前
深入探讨TK矩阵系统:创新的TikTok运营工具
矩阵
不忘不弃6 小时前
一般矩阵的转置
人工智能·算法·矩阵
subject625Ruben8 小时前
MATLAB 实现 Chatterjee 相关系数矩阵计算与特征选择
人工智能·matlab·矩阵
@ V:ZwaitY091 天前
TK矩阵:提高多账号管理效率的利器
矩阵
ksbglllllll1 天前
ccf3401矩阵重塑(其一)
c++·算法·矩阵
phoenix@Capricornus1 天前
二次型 → 矩阵的正定性 → 特征值
线性代数·矩阵
谢泽浩1 天前
Unity WebGLC# Datetime与Mysql Datetime的区别
unity·c#·webgl
web像素之境1 天前
webgl程序与GPU渲染管线硬件的对应(详细版)
webgl·gpu
Vacant Seat2 天前
二分查找-搜索二维矩阵
java·矩阵·二分查找
Mryan20052 天前
NumPy系列 - 创建矩阵
数据结构·python·线性代数·矩阵·numpy