Cesium 问题:三维场景下添加的实体会被遮挡

文章目录

    • 问题
    • 分析

问题

在三维场景下,我们添加的实体会被遮挡导致显示不够完整,例如

在这里插入图片描述
而应该的效果如下
在这里插入图片描述

分析

在三维场景中,实体可能会被以下几类物体或因素所遮挡:

  1. 地形:如果实体位于地球表面附近,地形的起伏和高度差可能导致实体被地形遮挡。这种情况下,可以使用Cesium提供的地形遮挡处理功能来减少遮挡效果。

  2. 其他实体:如果有多个实体在场景中,它们可能相互遮挡。当一个实体位于另一个实体的后面时,前面的实体会遮挡住后面的实体。这种情况下,可以调整实体的位置、缩放或者相机的视角来解决遮挡问题。

  3. 建筑物和结构物:如果实体位于建筑物、桥梁或其他结构物附近,这些结构物可能会遮挡住实体的一部分或全部。这种情况下,可以尝试调整相机的位置和视角,或者使用裁剪面来限制显示区域。

  4. 传感器效应:在某些应用中,例如雷达或红外传感器模拟,传感器的视锥可能会遮挡住实体的一部分区域。这种情况下,可以根据具体需求调整传感器参数或改变实体的位置和缩放。

要解决实体在三维场景中可能会被遮挡或局部遮挡的问题,可以考虑以下几种方法:

  1. 使用 disableDepthTestDistance 属性(建议使用)

    // 实体添加
    that.cesiums.pointEntitie = window.viewer.entities.add({ // 在该位置添加点position: cartesian,point: {pixelSize: 10,color: Cesium.Color.YELLOW,disableDepthTestDistance: Number.POSITIVE_INFINITY // 禁用深度测试,使点始终显示在地球表面上}
    });
    
    // 实体添加
    window.viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(Number(element[0].toFixed(5)),Number(element[1].toFixed(5))),point: {color: Cesium.Color.RED,    //点位颜色pixelSize: 10,                //像素点大小disableDepthTestDistance: Number.POSITIVE_INFINITY // 禁用深度测试,使点始终显示在地球表面上},label : {text :  x + ", " + y,font : '14pt Source Han Sans CN',    //字体样式fillColor:Cesium.Color.WHITE,        //字体颜色// backgroundColor:Cesium.Color.AQUA,    //背景颜色backgroundColor: new Cesium.Color(0.165, 0.165, 0.165, 0.8),// backgroundPadding: new Cesium.Cartesian2(10, 10),showBackground:true,                //是否显示背景颜色style: Cesium.LabelStyle.FILL,        //label样式outlineWidth : 2, verticalOrigin : Cesium.VerticalOrigin.CENTER,//垂直位置horizontalOrigin :Cesium.HorizontalOrigin.LEFT,//水平位置pixelOffset:new Cesium.Cartesian2(10,0),            //偏移disableDepthTestDistance: Number.POSITIVE_INFINITY // 禁用深度测试,使点始终显示在地球表面上}});
    
    this.od8 = window.viewer.entities.add({// id:'testLine',name: 'RedLine',polyline: {positions: Cesium.Cartesian3.fromDegreesArray(temp1),// width: 2,material: Cesium.Color.RED,disableDepthTestDistance: Number.POSITIVE_INFINITY // 禁用深度测试,使点始终显示在地球表面上// clampToGround: true}})
    
  2. 调整相机位置和视角:通过调整相机的位置和视角,可以改变观察场景的角度,从而避免遮挡问题。尝试将相机移动到更合适的位置,或者改变其朝向、俯仰角和滚动角以获得更好的视野。

  3. 禁用深度测试和遮挡处理:默认情况下,Cesium启用了深度测试和遮挡处理,以模拟真实世界中物体的遮挡关系。但这可能导致实体被其他物体遮挡而不完整显示。你可以尝试禁用深度测试来解决这个问题,方法如下:

    viewer.scene.globe.depthTestAgainstTerrain = false; // 禁用对地形的深度测试
    

    请注意,禁用深度测试可能会导致实体之间的遮挡关系出现问题。

  4. 调整实体的位置和缩放:检查实体的位置坐标是否准确,并尝试调整实体的缩放比例,使其更容易被观察到。根据需要,可以使用实体对象的position和scale属性来调整位置和缩放。

  5. 使用视点和裁剪面:在Cesium中,可以定义视点(viewpoint)和裁剪面(clipping plane)来控制场景中实体的可见性。视点可以指定观察者的位置和朝向,而裁剪面可以定义一个边界来裁剪不需要显示的部分。通过使用这些功能,你可以控制实体在三维场景中的显示,从而减少遮挡问题。

  6. 使用绘制图元的方式代替绘制实体类(但出现了新的问题:球面会无法进行拖动):在 Cesium 中,图元(Primitive)是一种基本的绘制对象,但它们不能直接进行交互,无法拖动或更改位置。如果你希望能够拖动球面实体,可以改用 Cesium 的实体(Entity)对象,并为实体添加相应的交互功能。

    //  图元添加
    that.cesiums.pointPrimitive = new Cesium.PointPrimitive({ 
    // 在该位置添加点position: cartesian,pixelSize: 10,color: Cesium.Color.YELLOW
    });
    window.viewer.scene.primitives.add(that.cesiums.pointPrimitive);};
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88318.shtml

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

相关文章

如何使用busybox制作根文件系统

BusyBox是一个非常流行的嵌入式Linux系统工具,它将众多的常用Unix命令集成到一个小巧的可执行文件中。使用BusyBox制作根文件系统(root filesystem)的大致步骤如下: 下载BusyBox: 可以从官方站点 (https://busybox.net/) 下载源代…

GoLang 百行代码实现小项目《家庭收支软件》

界面显示 实现思路 GoLang 百行代码实现的小项目《家庭收支软件》是一个简单的家庭收支记账软件,可以通过命令行界面记录和显示收支明细。 在代码中,定义了两个结构体类型:record(代表一条收支记录)和software&#…

Tomcat部署、优化、以及操作练习

目录 一.Tomcat的基本介绍 1.1.Tomcat是什么? 1.2.Tomcat的组件构成 1.3.Tomcat功能组件结构的核心功能 1.4.Tomcat的顶层架构 1.5.Tomcat的请求过程 1.6.Tomcat的配置文件 二.Tomcat服务部署 2.1.搭建Tomcat运行环境 2.2.安装启动Tomcat 三.Tomcat服务优…

LLM(二)| LIMA:在1k高质量数据上微调LLaMA1-65B,性能超越ChatGPT

本文将介绍在Lit-GPT上使用LoRA微调LLaMA模型,并介绍如何自定义数据集进行微调其他开源LLM 监督指令微调(Supervised Instruction Finetuning) 什么是监督指令微调?为什么关注它? 目前大部分LLM都是decoder-only&…

springboot学习笔记

yaml文件优先级: config文件夹下的yaml优先级高于同级目录下的yaml文件。 #springboot的多环境配置,可以通过选择激活哪一个配置文件 spring.profiles.activetestyaml的端口选择 server:port: 8081 spring:profiles:active: dev --- server:port: 808…

一图读懂「五度易链」大数据智慧招商解决方案,一站式招商、选商!

“五度易链”以全体量产业大数据为依托,将为区域政府或产业园区构筑智慧招商解决方案,提供从“招商渠道”到“招商评估”再到“招商管理”一站式招商、选商服务。解决招商线索匮乏、招商管理碎片化等一系列问题,还将提供企业综合能力甄别及客…

使用 MyBatisPlus 的注解方式进行 SQL 查询,它结合了条件构造器(Wrapper)和自定义 SQL 片段来构建查询语句。

MyBatis-Plus 是一个基于 MyBatis 的增强工具,它提供了一套方便的注解方式来进行 SQL 查询。其中,它结合了条件构造器(Wrapper)和自定义 SQL 片段来构建查询语句。 官网:条件构造器 | MyBatis-Plus 1、使用 Wrapper …

一台电脑安装多个不同版本Python

1、前提 当前Windows电脑下已经安装了一个python3.11,现在需要安装一个python3.9。下载地址:Python Releases for Windows | Python.org 2、步骤 找到对应的版本,并下载安装包。下载后,打开安装包。按图片勾选,点击n…

leetcode做题笔记148. 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 思路一:归并排序 c语言解法 struct ListNode* merge(struct ListNode* head1, struct ListNode* head2) {struct ListNode* dummyHead malloc(sizeof(struct ListNode));dummyHead…

分布式算法相关,使用Redis落地解决1-2亿条数据缓存

面试题:1~2亿数据需要缓存,请问如何设计个存储案例 回答:单机单台100%不可能,肯定是分布式存储,用redis如何落地? 一般业界有三种解决方案: 哈希取余分区 2亿条记录就是2亿个k,v&…

6.wifi开发【智能家居:下】,正式开发:智能开关灯,智能采集温湿度,智能调彩灯

一。WEB Server开发 1.需求分析 用户通过页面操作插座彩灯温湿度 【开发前端1】:智能插座网页设计 智能插座网页设计需求 1.通过浏览器访问ESP8266 webserver 2.显示“创客学院-WiFi-智能家居” 3.显示“智能插座” 4.显示当前插座工作状态 5.按键触发插座动作 2.…

Vue3+element-plus切换标签页时数据保留问题

记录一次切换标签页缓存失效问题,注册路由时name不一致可能会导致缓存失效

【前端面试题】2023年 国庆 前端面试真题之JS篇

人的一生,总是难免有浮沉。不会永远如旭日东升,也不会永远痛苦潦倒。反复地一浮一沉,对于一个人来说,正是磨练。因此,浮在上面的,不必骄傲;沉在底下的,更用不着悲观。必须以率直、谦…

公司架构师说不写代码,我直接怼他了!

1 不是不写代码 相反,一些核心组建核心代码都会参与,这些代码会在各种项目中去使用,对于健壮性,性能等各方面要求非常高,需要有一定水平的人才能写好。 阮一峰博客有一句话:“警惕那些很长时间没有编写任何…

若依注解学习(二)@DataScope

DataScope 作用: 一般写在service层的一些需要权限控制的业务方法上,针对部门和用户的权限,生成sql条件 dao层注入,实现数据权限的控制 位置: common下…

21.redo日志(下)

title: “redo日志(下)” createTime: 2022-03-06T15:52:4108:00 updateTime: 2022-03-06T15:52:4108:00 draft: false author: “ggball” tags: [“mysql”] categories: [“db”] description: “” redo log的刷盘时机 log buffer 空间不足时&…

m3u8视频播放HTML

m3u8视频播放HTML&#xff08;1&#xff09; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>前端播放m3u8格式视频</title><!--https://www.bootcdn.cn/video.js/--><link href&q…

selenium-webdriver 阿里云ARMS 自动化巡检

很久没更新了&#xff0c;今天分享一篇关于做项目巡检的内容&#xff0c;这部分&#xff0c;前两天刚在公司做了部门分享&#xff0c;趁着劲还没过&#xff0c;发出来跟大家分享下。 一、本地巡检实现 1. Selenium Webdriver(SW) 简介 Selenium Webdriver&#xff08;以下简称…

单中的部分字段失去焦点后,将数据还原为进入弹窗时的接口数据(深拷贝)

要实现在表单中的部分字段失去焦点后&#xff0c;将数据还原为进入弹窗时的接口数据&#xff0c;可以在进入弹窗时将接口数据保存为一个备份&#xff0c;然后在失去焦点的事件处理函数中将字段值设置为备份数据中相应字段的值。 如果 this.form.originalData 的值被同步修改&a…

多线程的死锁问题

可重入和不可重入&#x1f60a;&#x1f60a;&#x1f60a; 一个线程针对同一个对象,连续加锁两次,是否会有问题 ~~ 如果没问题,就叫可重入的.如果有问题,就叫不可重入的. 代码示例&#x1f349;&#x1f349;&#x1f349;: synchronized public void add(){synchronized (…