Cesium 渲染优化之批量渲染 - Primitive

原文链接

注: 近期几篇关于 三维渲染优化 的文章只专注于 Primitive。关于 Model, Cesium3DTileset 的内容另作安排。

上一篇介绍了 GPU三维渲染优化 - 批量渲染

本篇来说说 Primitive 的 批量渲染 (Batch Rendering)。

核心内容一部分在 BatchTable, 另一部分在 PrimitivePipeline.combineGeometry

由于BatchTable涉及到纹理相关内容, 准备另起一篇文章介绍。

PrimitivePipeline.combineGeometry(本函数属于同步加载部分, 异步加载的架构思想类似)里: 

本篇先说PrimitivePipeline.combineGeometry部分(下面的可以粘贴复制定位到源代码里)

packages/engine/Source/Scene/PrimitivePipeline.js:326

直接定位到的是下面一行代码

geometries = geometryPipeline(parameters);

这个函数做了三件事: 

  1. 将所有实例的几何数据(position, normal, st等)全都转换为世界坐标。

  2. 为每个实例的几何添加 Batch Id。

  3. 优化顶点缓存

  4. 将所有实例

Cesium中,要实现实时渲染,你可以使用`Cesium.Primitive`对象和自定义的渲染函数来更新渲染的几何体或实体。 以下是一个简单的示例,展示如何使用`Cesium.Primitive`来实现实时渲染: ```javascript // 创建一个自定义的Primitive var customPrimitive = new Cesium.Primitive({ geometryInstances: new Cesium.GeometryInstance({ geometry: new Cesium.PrimitiveGeometry({ // 这里可以指定你的几何体类型和属性 // 例如: new Cesium.RectangleGeometry({ ... }) }), attributes: { // 这里可以设置几何体的属性 // 例如: color: Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.RED) } }), appearance: new Cesium.MaterialAppearance({ // 这里可以设置材质外观 // 例如: material: new Cesium.Material({ ... }) }) }); // 添加自定义Primitive到场景中 viewer.scene.primitives.add(customPrimitive); // 定义一个更新函数,用于实时更新几何体或属性 function updateCustomPrimitive() { // 更新几何体的属性 // 例如: customPrimitive.geometryInstances.attributes.color = ...; // 刷新场景 viewer.scene.requestRender(); // 循环调用更新函数实现实时渲染 requestAnimationFrame(updateCustomPrimitive); } // 启动实时渲染 updateCustomPrimitive(); ``` 在以上代码中,我们创建了一个自定义的`Cesium.Primitive`对象,并将其添加到场景中。然后,我们定义了一个更新函数`updateCustomPrimitive()`,在该函数中可以更新几何体的属性,并使用`viewer.scene.requestRender()`方法刷新场景。最后,我们通过`requestAnimationFrame()`函数循环调用更新函数,实现实时渲染。 你可以根据自己的需求,根据几何体和属性的不同,自定义渲染函数以实现实时渲染
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值