Cesium 通过scaleByDistance设置远小近大的广告牌图形视觉效果

Cesium 通过scaleByDistance设置远小近大的广告牌图形视觉效果

通过设置Cesium.BillboardGraphics.ConstructorOptions的 scaleByDistance( Billboard和Label的属性) 来实现根据摄像机的距离改变实体的scale(缩放比)
Cesium.BillboardGraphics.ConstructorOptions
NearFarScalar

NearFarScalar接受参数

在这里插入图片描述
Cesium.NearFarScalar (near:摄像机范围的下限,nearValue:摄像机范围下限的值,far:摄像机范围的上限,farValue:摄像机范围上限的值)

比如:scaleByDistance: new Cesium.NearFarScalar(2000, 1, 8000, 0),

含义就是在摄像头和Billboard之间的距离在2000-8000之间的时候,Billboard的Scale比例按照1->0之间的插值来缩放。当摄像头和Billboard之间距离小于2000的时候,就按照2000时候的值1处理(这里如果不是1,而是0.5,那小于2000时候的比例就是0.5了)。而当大于8000的时候,就会按照0(其实就是8000对应的比例值)缩放。
原文链接:https://blog.csdn.net/weitaming1/article/details/93881534

下面是根据cesium官方实例里面找来的一组scaleByDistance的值,e2表示10的2次方

scaleByDistance: new Cesium.NearFarScalar(1.5e2, 2.0, 1.5e7, 0.5)

let obj = {
    show: true, // default
    pixelOffset: new Cesium.Cartesian2(0, 0), // default: (0, 0)
    eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0), // default
    horizontalOrigin: Cesium.HorizontalOrigin.CENTER, // default
    verticalOrigin: Cesium.VerticalOrigin.CENTER, // default: CENTER
    scale: 1.0, // default: 1.0
    color: Cesium.Color.WHITE, // default: WHITE LIME
    alignedAxis: Cesium.Cartesian3.ZERO, // default
    scaleByDistance: new Cesium.NearFarScalar(1.5e2, 2.0, 1.5e7, 0.5),
    width: 38, // default: undefined
    height: 38, // default: undefined
    depthTestAgainstTerrain: false
};
//图片配置
obj.image = `images/xxx.png`;
let billboard = new Cesium.BillboardGraphics(obj);
let entity = new Cesium.Entity({
    position: Cesium.Cartesian3.fromDegrees(lon, lat, 23000),
    billboard: billboard,
    id: '9527'
});
this.viewer.entities.add(entity);
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要在Cesium中实现HTML结构近大远小的效果,可以使用Cesium的3D Tiles功能。3D Tiles是一种用于将大量3D数据分层的格式,可以用来管理和渲染具有不同分辨率的3D模型。通过使用3D Tiles,可以在不牺牲质量的情况下,根据距离动态加载和卸载3D模型。 在使用3D Tiles时,可以设置不同层级的3D模型的显示距离和细节级别。这些设置可以控制3D模型随着距离的增加而变得更加简单,从而实现HTML结构近大远小的效果。 例如,可以将较远的3D模型设置为低细节级别,使其在远处显示为简单的形状。而在靠近时,可以将细节级别提高,使其显示更多的细节和结构。 下面是一个使用3D Tiles实现HTML结构近大远小效果的示例代码: ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); var tileset = new Cesium.Cesium3DTileset({ url : 'path/to/3d/tiles' }); // 设置3D Tiles的细节级别和显示距离 tileset.maximumScreenSpaceError = 16; tileset.maximumLevel = 5; tileset.distanceDisplayCondition = new Cesium.DistanceDisplayCondition(0.0, 5000.0); viewer.scene.primitives.add(tileset); ``` 在这个示例中,`maximumScreenSpaceError`和`maximumLevel`属性控制了3D模型的细节级别,`distanceDisplayCondition`属性控制了3D模型的显示距离。通过调整这些属性的值,可以实现不同程度的HTML结构近大远小效果。 ### 回答2: 在Cesium项目中实现HTML结构近大远小的效果,可以通过以下几个步骤实现: 1. 创建HTML结构:首先,你需要在Cesium场景中添加一个HTML元素用来承载你想要展示的内容。你可以使用Cesium的Entity API创建一个自定义的HTML元素,并通过设置其position属性来指定其在场景中的位置。 2. 调整HTML元素的样式:通过CSS样式来控制HTML元素的外观,例如大小、颜色和字体等。你可以在HTML元素上添加class或id,然后在CSS文件中定义这些样式,从而实现HTML元素的近大远小效果。 3. 按照视角调整HTML元素的大小:Cesium提供了视角变化的事件,可以根据用户的视角变化来调整HTML元素的大小。通过监听场景的"camera.moveEnd"事件,可以获取到相机的位置和朝向,并根据这些信息来计算HTML元素应该显示的大小。 4. 实时更新HTML元素的位置和大小:在Cesium中,可以使用Viewer的renderEvent事件来实现每一帧渲染之前调用的函数。在这个函数中,你可以更新HTML元素的位置和大小,从而实现实时的近大远小效果。 5. 优化性能:为了避免频繁更新HTML元素的位置和大小,可以设置一个阈值,当相机的距离超过这个阈值时才进行更新。可以调整这个阈值来平衡性能和效果的表现。 综上所述,通过创建HTML结构并调整其样式,根据视角变化实时更新其位置和大小,就可以在Cesium项目中实现近大远小的效果。 ### 回答3: 在Cesium项目中实现HTML结构近大远小的效果可以通过以下步骤实现: 1. 创建HTML标记:首先,你需要创建一个HTML标记,它将被用作你想要实现效果的模板。可以使用div、span或其他HTML元素来创建结构。 2. 将HTML标记添加到Cesium实体:将HTML标记添加到Cesium实体中,可以使用Cesium实体上的属性,如属性和属性表达式。例如,你可以使用Entity的description属性来添加HTML标记。 3. 定义HTML标记的样式:通过CSS样式表或内联样式,定义HTML标记的样式。你可以使用CSS属性如大小(width、height)、位置(position)、文本对齐(text-align)等属性来控制HTML标记的样式。 4. 进行相机远近的计算:通过Cesium的相机属性,如相机位置(camera.position)和相机距离(camera.distance)来进行相机的远近计算。根据相机距离的变化,可以动态改变HTML标记的大小。 5. 实现HTML标记的近大远小效果:根据相机距离的变化,使用JavaScript或其他编程语言,在合适的时机修改HTML标记的样式或属性,从而使其近大远小。 6. 监听相机事件:通过监听相机的事件,如相机移动事件(camera.moveEnd)或场景更新事件(scene.postRender),可以在适当的时候更新HTML标记的样式或位置。 通过以上步骤,你可以在Cesium项目中实现HTML结构近大远小的效果。这样,当用户在场景中移动相机时,HTML标记将根据相机的距离动态调整大小,达到近大远小的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值