轻量封装WebGPU渲染系统示例<34>- 数据驱动之Json构建场景

场景和数据之间的互通: 场景数据化或者数据化场景,是当前的主流场景数据构成方式。方便传输方便交换甚至是交互。

内置数据互通机制更有利于用户在各种应用场合下实现具体的3D相关的应用需求。用户只需要关心标准的或者约定好的数据定义及操作方式就能方便使用。

这样,也能方便应用GLB或者USD数据规范。

当前示例源码github地址:

https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/DataDrivenTest.ts

当前示例运行效果:

json数据:

{
	"renderer": {
		"camera": { "eye": [1100, 1100, 500], "up": [0, 1, 0] }
	},
	"entities": [
		{ "axis": { "entity": { "size": 500 } } },
		{ "sphere": { "entity": { "radius": 80, "transform": { "position": [0, 0, 200] }, "albedo": [0.9, 0.1, 0.02], "arm": { "a": 1.0, "r": 0.2, "m": 0 } } } },
		{
			"cube": {
				"entity": {
					"size": 80,
					"transform": { "position": [200, 0, 0], "scale": [2, 1.5, 3], "rotation": [-190, 0, 200] },
					"albedo": [0.1, 0.9, 0.02],
					"arm": { "a": 1.0, "r": 0.2, "m": 0 },
					"animate": {}
				}
			}
		},
		{
			"torus": {
				"entity": {
					"radius": 90,
					"axisType": 1,
					"rings": 50,
					"segments": 30,
					"transform": { "position": [0, 150, 0] },
					"albedo": [0.9, 0.1, 0.7],
					"arm": [1.0, 0.3, 0]
				}
			}
		},
		{
			"model": {
				"entity": {
					"url": "static/assets/draco/monkey.drc",
					"transform": { "position": [0, 320, 0], "scale": [100, 100, 100], "rotation": [0, 90, 0] },
					"albedo": [0.1, 0.7, 0.9],
					"arm": [1, 0.3, 0.1]
				}
			}
		},
		{
			"boundsFrame": {
				"entity": {
					"minPos": [-300, -300, -300],
					"maxPos": [300, 300, 300],
					"frameColor": [0.9, 1.0, 0.1]
				}
			}
		},
		{
			"gltf": { "entity": {} }
		},
		{
			"usd": { "entity": {} }
		}
	]
}

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

export class DataDrivenTest {

	private mScene = new DataDrivenRScene();
	initialize(): void {

		let url = "static/assets/scene/sceneData01.json";

		new HttpFileLoader().loadJson(
			url,
			(json: object, url: string): void => {
				console.log("json: ", json);
				this.initScene(json);
			}
		);
	}
	private initScene(json: object): void {
		this.mScene.initialize(json);
		this.initEvent();
	}
	private initEvent(): void {
		const rc = this.mScene;
		new MouseInteraction().initialize(rc.rscene, 0, false).setAutoRunning(true);
	}
	run(): void {
		this.mScene.run();
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值