cesium内部相同坐标在不同高度的2个点的属性机制坐标会gltf模型角度值异常问题mars3d的处理办法

本文主要是介绍cesium内部相同坐标在不同高度的2个点的属性机制坐标会gltf模型角度值异常问题mars3d的处理办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

模型一直向上运动的正常效果:

问题场景:

1.new mars3d.graphic.ModelPrimitive({使用addDynamicPosition(设置并添加动画轨迹位置,按“指定时间”运动到达“指定位置”时发现,如果是同一个点位不同高度值的y轴竖直向上方向的运动。

指定pitch:270偏转角度的时候,会出现模型的角度值异常的问题。

错误代码:

相关api文档:

ModelPrimitive - V3.7.0 - Mars3D API文档

相关示例演示链接:

功能示例(原生JS版) | Mars3D三维可视化平台 | 合肥火星科技有限公司

复现代码:

  function addDemoGraphics() {

        for (var i = 0; i < 1; i++) {

          var graphic = new mars3d.graphic.ModelPrimitive({

            // forwardExtrapolationType: Cesium.ExtrapolationType.HOLD,

            style: {

              url: "//data.mars3d.cn/gltf/mars/qiche.gltf",

              scale: 0.5,

              minimumPixelSize: 20,

              pitch: 270,

     

              // 高亮时的样式(默认为鼠标移入,也可以指定type:'click'单击高亮),构造后也可以openHighlight、closeHighlight方法来手动调用

              highlight: {

                type: mars3d.EventType.click,

                silhouette: true,

                silhouetteColor: "#ff0000",

                silhouetteSize: 4

              },

     

              label: {

                // 不需要文字时,去掉label配置即可

                text: "皖A000" + i,

                font_size: 16,

                color: "#ffffff",

                outline: true,

                outlineColor: "#000000",

                pixelOffsetY: -20,

                distanceDisplayCondition: true,

                distanceDisplayCondition_far: 50000,

                distanceDisplayCondition_near: 0

              }

            },

            attr: { index: i, name: "ModelPrimitive" }

          })

          graphicLayer.addGraphic(graphic)

        }

     

     

     

        // 设置动态位置

        changePosition(0)

     

        // 定时更新动态位置(setInterval为演示)

        var interval = 30

        changePosition(interval)

        setInterval(() => {

          changePosition(interval)

        }, interval * 1000)

      }

     

      // 改变位置

      function changePosition(time) {

        graphicLayer.eachGraphic((graphic) => {

          if (graphic.isPrivate) {

            return

          }

          graphic.addDynamicPosition(randomPoint(time), time) // 按time秒运动至指定位置

        })

      }

     

      // 取区域内的随机点

      function randomPoint(time) {

        return Cesium.Cartesian3.fromDegrees(117.207666, 31.817099, time)

      }

      function random(min, max) {

        return Math.floor(Math.random() * (max - min + 1) + min)

      }

关键代码说明:

1. return Cesium.Cartesian3.fromDegrees(117.207666, 31.817099, time)是实现小车模型随着时间沿着y轴竖直上升的效果

2.加入    pitch: 270,之后,发现在固定的点位不同高度值运动,cesium底层会出现相同坐标,不同高度的2个点的属性机制坐标会角度值异常的效果。

解决方案:

1.在mars3d中,场景中初始化的时候固定好模型的姿态信息hpr

               pitch: 270,

              heading:0,

              roll:0,

相关代码:

    var graphic = new mars3d.graphic.ModelPrimitive({

            // forwardExtrapolationType: Cesium.ExtrapolationType.HOLD,

            style: {

              url: "//data.mars3d.cn/gltf/mars/qiche.gltf",

              scale: 0.5,

              minimumPixelSize: 20,

              pitch: 90,

              heading:0,

              roll:0,

     

              // 高亮时的样式(默认为鼠标移入,也可以指定type:'click'单击高亮),构造后也可以openHighlight、closeHighlight方法来手动调用

              highlight: {

                type: mars3d.EventType.click,

                silhouette: true,

                silhouetteColor: "#ff0000",

                silhouetteSize: 4

              },

     

              label: {

                // 不需要文字时,去掉label配置即可

                text: "皖A000" + i,

                font_size: 16,

                color: "#ffffff",

                outline: true,

                outlineColor: "#000000",

                pixelOffsetY: -20,

                distanceDisplayCondition: true,

                distanceDisplayCondition_far: 50000,

                distanceDisplayCondition_near: 0

              }

            },

            attr: { index: i, name: "ModelPrimitive" }

          })

          graphicLayer.addGraphic(graphic)

这篇关于cesium内部相同坐标在不同高度的2个点的属性机制坐标会gltf模型角度值异常问题mars3d的处理办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/618501

相关文章

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤