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

轻量封装WebGPU渲染系统示例<14>- 多线程模型载入(源码)

当前示例源码github地址:

https://github.com/vilyLei/voxwebgpu/blob/main/src/voxgpu/sample/ModelLoadTest.ts

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

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

         细节请见:引擎系统设计思路 - 用户态与系统态隔离-CSDN博客

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

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

4. 渲染数据(内外部相关资源)和渲染机制分离。

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

6. 数据/语义驱动。

7. 异步并行的模型载入。

当前示例运行效果:

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

export class ModelLoadTest {private mRscene = new RendererScene();private mTeamLoader = new CoModelTeamLoader();initialize(): void {console.log("ModelLoadTest::initialize() ...");const rc = this.mRscene;rc.initialize();this.initEvent();this.initModels();}private initEvent(): void {const rc = this.mRscene;rc.addEventListener(MouseEvent.MOUSE_DOWN, this.mouseDown);new MouseInteraction().initialize(rc, 0, false).setAutoRunning(true);}private createGeometry(gd: CoGeomDataType, normalEnabled = false): WGGeometry {const geometry = new WGGeometry().addAttribute({ position: gd.vertices }).addAttribute({ uv: gd.uvsList[0] }).setIndices(gd.indices);if (normalEnabled) {geometry.addAttribute({ normal: gd.normals });}return geometry;}private initModels(): void {let url0 = "static/assets/fbx/mat_ball.fbx";let loader = this.mTeamLoader;loader.load([url0], (models: CoGeomDataType[], transforms: Float32Array[]): void => {console.log("loaded models: ", models);for (let i = 0; i < models.length; ++i) {this.createEntity(models[i]);}});}private mouseDown = (evt: MouseEvent): void => { };private createEntity(model: CoGeomDataType): void {const rc = this.mRscene;const geometry = this.createGeometry(model, true);let entity = new PrimitiveEntity({ geometry }).setAlbedo(new Color4().randomRGB(1.5, 0.1)).setARM(1.1, Math.random() * 0.95 + 0.05, Math.random() * 0.9 + 0.1);rc.addEntity( entity );}run(): void {this.mRscene.run();}
}

相关文章:

  • linux环境下编译,安卓平台使用的luajit库
  • 七、W5100S/W5500+RP2040树莓派Pico<UDP 组播>
  • VSCode中的任务什么情况下需要配置多个问题匹配器problemMatcher?多个问题匹配器之间的关系是什么?
  • rust入门基础案例:猜数字游戏
  • Qt for Android代码中输出日志
  • Kubernetes群集调度
  • 基于ASP.NET MVC + Bootstrap的仓库管理系统
  • Ubuntu20.04下安装Redis环境
  • ElasticSearch集群架构实战及其原理剖析
  • 前端埋点方式
  • C++中浅复制及其存在的问题
  • Python 代码格式化工具YAPF 0.17.0问世
  • C++类和对象(七)const成员 及其初始化列表
  • Pytorch图像模型转ONNX后出现色偏问题
  • Visual Studio 2010 软件安装教程(附下载链接)——计算机二级专用编程软件
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • es6
  • Git学习与使用心得(1)—— 初始化
  • Java比较器对数组,集合排序
  • leetcode386. Lexicographical Numbers
  • mac修复ab及siege安装
  • PHP那些事儿
  • spring boot 整合mybatis 无法输出sql的问题
  • spring security oauth2 password授权模式
  • Swift 中的尾递归和蹦床
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 分享几个不错的工具
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (java)关于Thread的挂起和恢复
  • (LeetCode) T14. Longest Common Prefix
  • (超详细)语音信号处理之特征提取
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (论文阅读40-45)图像描述1
  • (三)elasticsearch 源码之启动流程分析
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (转)c++ std::pair 与 std::make
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)关于多人操作数据的处理策略
  • .net MySql
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET命名规范和开发约定
  • .NET下ASPX编程的几个小问题
  • .net中调用windows performance记录性能信息
  • .pop ----remove 删除
  • /usr/bin/env: node: No such file or directory
  • @PreAuthorize注解