码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 轻量封装WebGPU渲染系统示例<12>- 基础3D对象实体(源码)


    此混合渲染与计算系统中,用户侧可直接接触和操作可渲染(计算)实体(Entity)。这些实体可以用于呈现画面效果也可以仅用于计算。实体可以加入场景,可以加入渲染核心,也可以加入计算核心。如果使用rendering or computing pass node,也可以直接将渲染实体加入对应的pass node。

    用于计算的实体使用请见: https://blog.csdn.net/vily_lei/article/details/134236068?spm=1001.2014.3001.5502

    当前示例源码github地址:

    https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/PrimitiveEntityTest.ts

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

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

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

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

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

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

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

    6. 数据/语义驱动。

    当前示例运行效果:

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

    1. export class PrimitiveEntityTest {
    2. private mRscene = new RendererScene();
    3. initialize(): void {
    4. this.initEvent();
    5. this.initScene();
    6. }
    7. private initEvent(): void {
    8. const rc = this.mRscene;
    9. rc.addEventListener(MouseEvent.MOUSE_DOWN, this.mouseDown);
    10. new MouseInteraction().initialize(rc, 0, false).setAutoRunning(true);
    11. }
    12. private mouseDown = (evt: MouseEvent): void => {};
    13. private initScene(): void {
    14. const rc = this.mRscene;
    15. let axis = new AxisEntity();
    16. rc.addEntity( axis );
    17. let entities = [
    18. new SphereEntity(),
    19. new BoxEntity(),
    20. new CylinderEntity({alignYRatio : 0.0}),
    21. new CubeEntity({cubeSize: 130}),
    22. new TorusEntity({radius: 110, axisType: 1}),
    23. new PlaneEntity({axisType: 1, extent: [-80, -80, 160, 160], doubleFace: true}),
    24. new ConeEntity({alignYRatio : 0.0})
    25. ];
    26. let ls = entities;
    27. entities = [];
    28. for (let i = 0, ln = ls.length; i < ln; ++i) {
    29. const k = Math.round(Math.random() * 888)%ls.length;
    30. const t = ls[k];
    31. entities.push(ls[k]);
    32. ls.splice(k,1);
    33. }
    34. let radius = 350.0;
    35. for (let i = 0; i < entities.length; ++i) {
    36. let rad = 2.0 * Math.PI * i / entities.length;
    37. let entity = entities[i]
    38. .setAlbedo(new Color4().randomRGB(1.5, 0.1))
    39. .setARM([1.1, Math.random() * 0.95 + 0.05, Math.random() * 0.9 + 0.1]);
    40. entity.transform.setPosition( [radius * Math.cos(rad), 0, radius * Math.sin(rad)] );
    41. rc.addEntity(entity);
    42. }
    43. }
    44. run(): void {
    45. this.mRscene.run();
    46. }
    47. }

  • 相关阅读:
    【ESD专题】金属外壳连接器的信号PIN脚需要进行ESD测试吗?
    文件的编译与链接
    设计模式学习笔记 - 设计原则 - 2.开闭原则
    评价指标(一)精确率,召回率,F1-score
    设计模式-代理模式
    [N诺] 复旦大学历年上机题解
    关于信息安全软考的记录3
    Java高级之反射
    QT DAY1
    VUE+Spring前后台传值的坑,后台接收的String参数在末尾会出现 “=”
  • 原文地址:https://blog.csdn.net/vily_lei/article/details/134212412
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号