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-06-02
    目录

    12. 练习—顶点位置插值

    # 练习—顶点位置插值

    本节课内容算是一个练习题,并不讲解新的WebGPU知识点,用到的WebGPU知识点是上节课讲解的WebGPU顶点数据插值计算 (opens new window)。

    # WGSL顶点着色器代码(考虑旋转影响)

    参考上节课内容,给2.8小节矩形旋转案例源码增加顶点插值计算shader。

    原来顶点着色器代码

    @group(0) @binding(0) var<uniform> modelMatrix:mat4x4<f32>;
    @vertex
    fn main(@location(0) pos: vec3<f32>) -> @builtin(position) vec4<f32> {
        return modelMatrix * vec4<f32>(pos,1.0);
    }
    

    顶点着色器代码增加顶点插值计算功能

    @group(0) @binding(0) var<uniform> modelMatrix:mat4x4<f32>;
    struct Out{
        @builtin(position) position:vec4<f32>,
        @location(0) vPosition:vec3<f32>,
    }
    @vertex
    fn main(@location(0) pos: vec3<f32>) -> Out{
        var out:Out;
        out.position = modelMatrix * vec4<f32>(pos,1.0);
        // 顶点插值的时候考虑模型矩阵的影响
        // 注意vPosition数据类型是三维向量,计算结果执行.xyz
        out.vPosition = (modelMatrix * vec4<f32>(pos,1.0)).xyz;
        return out;
    }
    

    # WGSL片元着色器代码

    原来的WGSL顶点着色器代码

    @fragment
    fn main(@location(0) vPosition:vec3<f32>) -> @location(0) vec4<f32> {
        return vec4<f32>(vPosition.x, 0.0, 1.0-vPosition.x, 1.0);
    }
    

    根据旋转后的顶点插值坐标,设置每个片元的颜色值。

    @fragment
    fn main(@location(0) vPosition:vec3<f32>) -> @location(0) vec4<f32> {
        // 根据旋转后的顶点插值坐标,设置每个片元的颜色值
        return vec4<f32>(vPosition.z, 0.0, 1.0-vPosition.z, 1.0);
    }
    

    # 不考虑模型矩阵对顶点置坐标的影响

    不考虑模型矩阵对顶点位置坐标的影响,插值计算的时候,直接设置out.vPosition = pos;即可。

    fn main(@location(0) pos: vec3<f32>) -> Out{
        var out:Out;
        out.position = modelMatrix * vec4<f32>(pos,1.0);
        // 顶点插值的时候考虑模型矩阵的影响
        // 注意vPosition数据类型是三维向量,计算结果执行.xyz
        // out.vPosition = (modelMatrix * vec4<f32>(pos,1.0)).xyz;
        // 顶点插值的时候不考虑模型矩阵的影响
        out.vPosition = pos;
        return out;
    }
    

    # WGLSL语法练习——vPosition设置为vec4类型

    @group(0) @binding(0) var<uniform> modelMatrix:mat4x4<f32>;
    struct Out{
        @builtin(position) position:vec4<f32>,
        @location(0) vPosition:vec4<f32>,
    }
    @vertex
    fn main(@location(0) pos: vec3<f32>) -> Out{
        var out:Out;
        out.position = modelMatrix * vec4<f32>(pos,1.0);
        // 顶点插值的时候考虑模型矩阵的影响
        // 注意vPosition数据类型是三维向量,计算结果执行.xyz
        out.vPosition = modelMatrix * vec4<f32>(pos,1.0);
        return out;
    }
    
    @fragment
    fn main(@location(0) vPosition:vec4<f32>) -> @location(0) vec4<f32> {
        return vec4<f32>(vPosition.x, 0.0, 1.0-vPosition.x, 1.0);
    }
    

    # WGLSL语法练习

    out.vPosition和out.position计算方式相同,可以直接把out.position赋值给out.vPosition

    @vertex
    fn main(@location(0) pos: vec3<f32>) -> Out{
        var out:Out;
        out.position = modelMatrix * vec4<f32>(pos,1.0);
        // out.vPosition = modelMatrix * vec4<f32>(pos,1.0);
        // .vPosition和.position计算方式相同,可以直接把.position赋值给.vPosition
        out.vPosition = out.position;
        return out;
    }
    
    11. WebGPU顶点数据插值计算
    13. 顶点颜色数据插值计算

    ← 11. WebGPU顶点数据插值计算 13. 顶点颜色数据插值计算→

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