轻量封装WebGPU渲染系统示例<3>-纹理立方体(源码)

当前示例源码github地址:

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

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

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

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

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

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

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

当前示例运行效果:

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

export class ImgTexturedCube {geomData = new GeomDataBuilder();renderer = new WGRenderer();initialize(): void {console.log("ImgTexturedCube::initialize() ...");const shdSrc = {vertShaderSrc: { code: vertWGSL, uuid: "vtxShdCode" },fragShaderSrc: { code: fragWGSL, uuid: "fragShdCode" }};const material = this.createMaterial(shdSrc, [new WGImage2DTextureData("static/assets/box.jpg")]);this.createEntity([material]);}private createMaterial(shdSrc: WGRShderSrcType,texDatas?: WGImage2DTextureData[]): WGMaterial {let pipelineDefParam = {faceCullMode: "back"};const texTotal = texDatas ? texDatas.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: texDatas[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] }).addAttribute({ shdVarName: "uv", data: rgd.uvs, strides: [2] }).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.hqwc.cn/news/151292.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pytorch入门实例

数据集是受教育年限和收入,如下图 代码如下 import torch import numpy as np import matplotlib.pyplot as plt import pandas as pd import torch.nn as nn import torch.optim as optimdata pd.read_csv(./Income.csv)X torch.from_numpy(data.Education.values.reshape…

速卖通商品详情API接口(标题|主图|SKU|价格|商品描述)

速卖通商品详情接口的用途是获取商品信息。 速卖通商品详情接口可以获取到商品的完整详细信息&#xff0c;包括商品名称、价格、图片、描述、规格、库存等&#xff0c;这些信息能够帮助用户了解商品特点、性能和市场定位&#xff0c;并做出购买决策。同时&#xff0c;通过使用…

【计算机网络】认识协议

目录 一、应用层二、协议三、序列化和反序列化 一、应用层 之前的socket编程&#xff0c;都是在通过系统调用层面&#xff0c;如今我们来向上打通计算机网络。认识应用层的协议和序列化与反序列化 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应…

自动驾驶,从“宠儿”走进“淘汰赛”

从“一步到位”到场景、技术降维。从拼落地路径&#xff0c;到拼雷达、算力&#xff0c;再到如今的性价比之争&#xff0c;自动驾驶似乎变得愈发“接地气”。 作者|斗斗 编辑|皮爷 出品|产业家 比起去年&#xff0c;黄文欢和张放今年显得更加忙碌。 “自动驾驶赛道&…

nrf52832 开发板入手笔记:资料搜集

前言 最近翻箱&#xff0c;发现了两块几年前买的 NRF52832 与 NRF52840 的开发板&#xff0c;打算搭个 BLE 的开发环境 NRF52832 与 NRF51822 之前用过&#xff0c; NRF52840 没有用过&#xff0c;好像是 BLE4 与 BLE5 的区别吧 相关介绍 除了开发板&#xff0c;最重要的还是…

线程池的理解

线程池 线程池本质上是一种池化技术&#xff0c;而池化技术是一种资源复用的思想&#xff0c;比较常见的有连接池、内存池、对象池。 而线程池里面复用的是线程资源&#xff0c;它的核心设计目标&#xff0c;有两个&#xff1a; 减少线程的频繁创建和销毁带来的性能开销&#x…

Response Header中不暴露Server(IIS)版本、ASP.NET及相关版本等信息

ASP MVC开发的Web默认情况下会在请求的回应中暴露Server、X-AspNet-Version、X-AspNetMvc-Version、X-Powered-By等相关服务端信息&#xff0c;公开这些敏感信息会存在一定的安全风险。 X-SourceFiles标头用于被IIS / IIS Express中某些调试模块理解&#xff0c;它包含到磁盘上…

20231027 基于STM32mp157a 的内核与应用层通过子系统控制led灯,以及计时器功能

1.基于GPIO子系统编写LED驱动&#xff0c;编写应用程序进行测试 stm32mp157a-fsmp1a.dts 内核程序&#xff1a;ledk.c #include <linux/init.h> #include <linux/module.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/de…

提升技能,挑战自我——一站式在线题库小程序

在这个信息爆炸的时代&#xff0c;我们总是在寻找一种方式&#xff0c;让自己在众多的知识海洋中快速提升技能&#xff0c;挑战自我。今天&#xff0c;我要向大家推荐一款全新的在线题库小程序KD蝌蚪阿坤&#xff0c;它将帮助你实现这个目标。 KD蝌蚪阿坤是一款全面的在线题库…

HPV感染的风险:闫会宁主任分析酒店环境中的常见因素

人类乳头瘤病毒(HPV)是一种普遍存在的病毒&#xff0c;其存在和传播方式多种多样。近年来&#xff0c;人们对于HPV的认识不断深入&#xff0c;知道其在酒店环境中的传播风险。本文将探讨哪些情况下在酒店可能感染HPV。 一、HPV的传播方式 HPV主要通过直接接触传播&#xff0c…

0基础学习PyFlink——用户自定义函数之UDF

大纲 标量函数入参并非表中一行&#xff08;Row&#xff09;入参是表中一行&#xff08;Row&#xff09;alias PyFlink中关于用户定义方法有&#xff1a; UDF&#xff1a;用户自定义函数。UDTF&#xff1a;用户自定义表值函数。UDAF&#xff1a;用户自定义聚合函数。UDTAF&…

JS中面向对象的程序设计

面向对象&#xff08;Object-Oriented&#xff0c;OO&#xff09;的语言有一个标志&#xff0c;那就是它们都有类的概念&#xff0c;而通过类可以创建任意多个具有相同属性和方法的对象。但在ECMAScript 中没有类的概念&#xff0c;因此它的对象也与基于类的语言中的对象有所不…