如何实现一个多面体的变形效果?求思路。

Cesium源码 · k316370554 · 于 16天前 发布 · 126 次阅读

需求如下:

在 Cesium 中,绘制一个金字塔形状的多面体(底面为四边形,然后四个侧面为三角形,一共有五个顶点)。根据服务器端数据的推送,多面体的五个顶点发生位置的变化,由此引发了这个多面体的变形效果。

当前思路:

使用 Primitive 绘制。 这个 primitive 实例,由5个 PolygonGeometry 绘制的 geometryInstances(四个三角形侧面,和一个四边形底面)构成。
服务器端推送数据时,前端 remove 当前 scene 中的 primitive 实例,然后重新创建一个 primitive 对象并添加到 scene 中。

出现问题:

在删除而后重新添加 primitive 的瞬间,屏幕上的 primitive 会闪烁一下。如何消除这个闪烁?
或者,有没有其它合适的方案,来实现这个需求?

补充描述:

“闪烁”并非指不连贯的,没有过渡的变化,而是 这个多边形会消失一瞬间,而后又马上出现。不太明白,消失的原因何在。“消失”并非我所期望的。
共收到 5 条回复 cesium
admin#115天前 0 个赞

我觉得你的思路没问题,应该是刷新那一下抖了一下。其实是可以理解的,因为中间的过渡状态都没有。

目前我还不确定Cesium是否支持,但是你可以从一个方向看看:

  1. 不知道您是否知道flyto这个函数,它是从一个点,平滑到另一个点,而不是瞬间跳到另一个点。
  2. 你的需求里面是5个点,如果你能平滑过渡这5个点的位置,看起来效果会很好。
  3. 但是我不知道平面是否支持。
tangelridiia#214天前 1 个赞

可以试试sampledproperty方式,在数据出现变化后,根据你想要的变形速度,用sampledproperty给出下一个时间点的物体形状,让cesium自己画过去

k316370554#39天前 0 个赞

请教,那如何在创建 PolygonGeometry 时使用 sampledproperty 类型的数据呢?

查了下API,PolygonGeometry 的顶点数据只接收 Array< Cartesian3 > 类型的参数。我尝试传入 sampledPositionProperty 类型的positions,就 renderError 了。

k316370554#48天前 1 个赞

找到闪烁的解决办法了。

创建 primitive 时,设置 asynchronous 为 false 即可。

渲染性能和渲染质量之间的取舍。。。

k316370554#58天前 1 个赞

再稍微优化下,使用 primitive 的 readyPromise

添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册
Your Site Analytics