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

    16. 结构体作为WGLSL函数参数

    # 结构体作为WGSL函数参数

    本节课给大家讲解,在WebGPU案例中,把结构体作为WGSL顶点着色器和片元着色器主函数main的参数。

    下面直接在2.14节代码基础上给大家演示。

    # 结构体作为顶点着色器main函数参数

    下面两端代码的功能是相同的。

    顶点位置数据、顶点颜色数据对应的变量作为WGSL顶点着色器main函数的参数,输入给顶点着色器使用。

    struct Out {
        @builtin(position) position : vec4<f32>,
        // vColor表示顶点颜色插值后,每个片元对应的颜色数据
        @location(0) vColor: vec3<f32>
    }
    @vertex
    // main函数输入顶点位置数据和顶点颜色数据
    fn main(@location(0) pos: vec3<f32>,@location(1) color: vec3<f32>) -> Out {
        var out: Out;
        out.position = vec4<f32>(pos,1.0);
        out.vColor = color;
        return out;
    }
    

    声明一个结构体Input,包含顶点位置数据和顶点颜色数据,然后结构体作为main函数参数。

    struct Out {
        @builtin(position) position : vec4<f32>,
        // vColor表示顶点颜色插值后,每个片元对应的颜色数据
        @location(0) vColor: vec3<f32>
    }
    struct Input{
        @location(0) pos: vec3<f32>,
        @location(1) color: vec3<f32>
    }
    @vertex
    // 结构体作为main函数参数:结构体包含顶点位置数据和顶点颜色数据
    fn main(input:Input) -> Out {
        var out: Out;
        out.position = vec4<f32>(input.pos,1.0);
        out.vColor = input.color;
        return out;
    }
    

    # 结构体作为片元着色器main函数参数

    插值后的顶点颜色数据对应变量vColor作为片元着色器main函数的参数。

    @fragment
    // 插值后顶点颜色数据,作为函数参数
    fn main( @location(0) vColor: vec3<f32>) -> @location(0) vec4<f32> {
        // 插值后顶点颜色数据作为赋值给每个片元
        return vec4<f32>(vColor, 1.0);
    }
    

    结构体作为片元着色器main函数的参数。

    struct Input{
        @location(0) vColor: vec3<f32>
    }
    @fragment
    // 插值后顶点颜色数据,作为函数参数
    fn main( input:Input) -> @location(0) vec4<f32> {
        // 插值后顶点颜色数据作为赋值给每个片元
        return vec4<f32>(input.vColor, 1.0);
    }
    
    15. 练习-顶点颜色

    ← 15. 练习-顶点颜色

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