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

轻量封装WebGPU渲染系统示例<4>-CubeMap/天空盒(源码)

当前示例源码github地址:

https://github.com/vilyLei/voxwebgpu/blob/version-1.01/src/voxgpu/sample/ImgCubeMap.ts

此示例渲染系统实现的特性:

1. 用户态与系统态隔离。

2. 高频调用与低频调用隔离。

3. 面向用户的易用性封装。

4. 渲染数据和渲染机制分离。

5. 用户操作和渲染系统调度并行机制。

当前示例运行效果:

此示例基于此渲染系统实现,当前示例TypeScript源码如下

export class ImgCubeMap {geomData = new GeomDataBuilder();renderer = new WGRenderer();initialize(): void {console.log("ImgCubeMap::initialize() ...");let urls = ["static/assets/hw_morning/morning_ft.jpg","static/assets/hw_morning/morning_bk.jpg","static/assets/hw_morning/morning_up.jpg","static/assets/hw_morning/morning_dn.jpg","static/assets/hw_morning/morning_rt.jpg","static/assets/hw_morning/morning_lf.jpg"];let td = new WGImageCubeTextureData(urls);const shdSrc = {vertShaderSrc: { code: vertWGSL, uuid: "vtxShdCode" },fragShaderSrc: { code: fragWGSL, uuid: "fragShdCode" }};const material = this.createMaterial(shdSrc, [td]);this.createEntity([material]);}private createMaterial(shdSrc: WGRShderSrcType,texDataList?: WGImageTextureData[]): WGMaterial {let pipelineDefParam = {faceCullMode: "back"};const texTotal = texDataList ? texDataList.length : 0;const material = new WGMaterial({shadinguuid: "base-material-tex" + texTotal,shaderCodeSrc: shdSrc,pipelineDefParam});if (texTotal > 0) {const texWrappers: WGTextureWrapper[] = new Array(texTotal);for (let i = 0; i < texTotal; ++i) {texWrappers[i] = new WGTextureWrapper({ texture: { data: texDataList[i], shdVarName: "texture" + i } });}material.textures = texWrappers;}return material;}private createEntity(materials: WGMaterial[]): Entity3D {const renderer = this.renderer;const rgd = this.geomData.createCubeWithSize(200);const geometry = new WGGeometry().addAttribute({ shdVarName: "position", data: rgd.vs, strides: [3] }).setIndexBuffer({ name: "geomIndex", data: rgd.ivs });const entity = new Entity3D();entity.materials = materials;entity.geometry = geometry;renderer.addEntity(entity);return entity;}run(): void {this.renderer.run();}
}

http://www.lryc.cn/news/210792.html

相关文章:

  • Linux 环境变量 二
  • Beyond Compare4 30天试用到期的解决办法
  • sentinel规则持久化-规则同步nacos-最标准配置
  • 【Linux】tail命令使用
  • 【数据结构】面试OJ题——时间复杂度2
  • LibreOffice编辑excel文档如何在单元格中输入手动换行符
  • ideaSSM在线商务管理系统VS开发mysql数据库web结构java编程计算机网页源码maven项目
  • 数据结构 | 顺序表专题
  • C++可视化 有穷自动机NFA 有穷自动机DFA
  • vite vue3 ts 使用sass 设置样式变量 和重置默认样式
  • MySQL安全基线检查
  • Unity主程如何做好游戏项目管理
  • 103.linux5.15.198 编译 firefly-rk3399(2)
  • 如何从Android手机上轻松恢复误删除的短信 ?
  • 毅速丨金属3D打印能替代传统制造吗?
  • 21个新的ChatGPT应用
  • 【通信原理】第二章|确知信号
  • 【JVM】类加载器
  • 利用Excel支持JUnit参数化测试
  • 第三章 SysML入门|系统建模语言SysML实用指南学习
  • 敏捷开发框架Scrum-概述
  • Hafnium启动过程分析
  • 0基础学习PyFlink——使用Table API实现SQL功能
  • 文心一言 VS 讯飞星火 VS chatgpt (123)-- 算法导论10.4 4题
  • [读论文] On Joint Learning for Solving Placement and Routing in Chip Design
  • L2-1 插松枝
  • Android 使用ContentObserver监听SettingsProvider值的变化
  • 二进制安装部署k8s
  • 多输入多输出 | Matlab实现k-means-ELM(k均值聚类结合极限学习机)多输入多输出组合预测
  • ITSource 分享 第5期【校园信息墙系统】