Three.js中文网 Three.js中文网
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
首页
免费视频
系统课 (opens new window)
  • Three.js基础课程
  • Vue3+Threejs 3D可视化
  • Threejs进阶课程
  • 展厅3D预览漫游
  • Threejs Shader
  • Blender建模基础
  • Three.js基础课程(旧版本) (opens new window)
  • 文章
WebGPU教程
  • WebGL教程
  • WebGL教程(旧版本) (opens new window)
3D案例
  • 本站部署(打开快) (opens new window)
  • 原英文官网文档 (opens new window)
Web3D系统课程视频
  • 1.WebGPU快速入门

  • 2. 3D几何变换数学基础

    • 1. 数学基础(平移、旋转、缩放矩阵)
    • 2. 模型矩阵
    • 3. gl-matrix数学计算库
    • 4. 顶点着色器矩阵变换
    • 5. WebGPU传递uniform数据
    • 6. gl-matrix生成顶点着色器的矩阵
      • 7. WebGPU动画(uniform旋转矩阵)
      • 8. 绕y轴旋转动画
      • 9. 片元的屏幕坐标
      • 10. 片元深度值、深度缓冲区
      • 11. WebGPU顶点数据插值计算
      • 12. 练习—顶点位置插值
      • 13. 顶点颜色数据插值计算
      • 14. 顶点位置、颜色数据共享缓冲区
      • 15. 练习-顶点颜色
      • 16. 结构体作为WGLSL函数参数
    • WebGPU教程
    • 2. 3D几何变换数学基础
    郭隆邦
    2023-05-19
    目录

    6. gl-matrix生成顶点着色器的矩阵

    # gl-matrix生成顶点着色器的矩阵

    你可以把本节课内容作为前面三小节的练习题,尝试先自己写下,再看视频。

    • gl-matrix生成缩放、平移等模型矩阵
    • uniform传递矩阵数据
    • 顶点着色器使用矩阵变换顶点

    # 引入gl-matrix库

    根据你自己文件gl-matrix库的地址设置路径。

    gl-matrix库使用的基本语法,可以参考2.3小节 (opens new window)。

    // 引入gl-matrix库
    import * as glMatrix from '../../gl-matrix/index.js'
    

    # glMatrix生成顶点着色器缩放矩阵

    // 传递着色器对应uniform数据
    const mat4Array = glMatrix.mat4.create();
    //缩放变换
    glMatrix.mat4.scale(mat4Array, mat4Array, [0.5, 0.5, 1]);
    // 在GPU显存上创建一个uniform数据缓冲区
    const mat4Buffer = device.createBuffer({
        size: mat4Array.byteLength,
        usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
    });
    // mat4Array里面矩阵数据写入uniform缓冲区mat4Buffer
    device.queue.writeBuffer(mat4Buffer, 0, mat4Array);
    

    # glMatrix生成顶点着色器平移矩阵

    // 传递着色器对应uniform数据
    const mat4Array = glMatrix.mat4.create();
    //生成平移变换矩阵
    glMatrix.mat4.translate(mat4Array, mat4Array, [-1, -1, 0]);
    // 在GPU显存上创建一个uniform数据缓冲区
    const mat4Buffer = device.createBuffer({
        size: mat4Array.byteLength,
        usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
    });
    // mat4Array里面矩阵数据写入uniform缓冲区mat4Buffer
    device.queue.writeBuffer(mat4Buffer, 0, mat4Array);
    

    # 模型矩阵(先平移、后缩放)

    // 传递着色器对应uniform数据
    const modelMatrix = glMatrix.mat4.create();
    //后发生缩放变换,先乘
    glMatrix.mat4.scale(modelMatrix, modelMatrix, [0.5, 0.5, 1]);
    //先发生平移变换,后乘
    glMatrix.mat4.translate(modelMatrix, modelMatrix, [-1, -1, 0]);
    // 在GPU显存上创建一个uniform数据缓冲区
    const modelMatrixBuffer = device.createBuffer({
       size: modelMatrix.byteLength,
       usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
    });
    device.queue.writeBuffer(modelMatrixBuffer, 0, modelMatrix);
    

    # 模型矩阵(先缩放、后平移)

    // 传递着色器对应uniform数据
    const modelMatrix = glMatrix.mat4.create();
    //后发生平移变换,先乘
    glMatrix.mat4.translate(modelMatrix, modelMatrix, [-1, -1, 0]);
    //先发生缩放变换,后乘
    glMatrix.mat4.scale(modelMatrix, modelMatrix, [0.5, 0.5, 1])
    // 在GPU显存上创建一个uniform数据缓冲区
    const modelMatrixBuffer = device.createBuffer({
       size: modelMatrix.byteLength,
       usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST
    });
    device.queue.writeBuffer(modelMatrixBuffer, 0, modelMatrix);
    
    5. WebGPU传递uniform数据
    7. WebGPU动画(uniform旋转矩阵)

    ← 5. WebGPU传递uniform数据 7. WebGPU动画(uniform旋转矩阵)→

    Theme by Vdoing | Copyright © 2016-2025 豫ICP备16004767号-2
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式