Cesium中对Cesium.Cesium3DTileset模型进行偏移

Cesium中对Cesium.Cesium3DTileset模型进行偏移

3D Tiles 是将用于流式传输3D内容,包括建筑物,树木,点云,矢量数据。3DTiles 数据集以分块,分级渲染,将大数据量三维数据以分块,分层的形式组织起来,可以大量减轻浏览器和GPU的渲染压力。
但是很多时候,我们添加的3D Tiles 模型他的位置,并不是我们想要的位置。由于单个瓦片的位置信息是写到了数据中的(.b3dm 和对应的 json 文件中), 如果能整体调整加载后的 Tileset,就是最好的选择。

而 3D Tiles 的 modelMatrix 刚好可以实现更改位置的效果

2. 对3D Tiles 模型进行偏移

const translation = Cesium.Cartesion3.fromArray([x, y, z]);
// x: 就是我们要向相对他现在的位置偏移多少的X量
// y: 就是我们要向相对他现在的位置偏移多少的y量
// z: 就是我们要向相对他现在的位置偏移多少的z量const m = Cesium.Matrix4.fromTranslation(translation);
// 然后我们将这个生成的矩阵,重新赋值给 3D tiles 的 _modelMatrix 就可以了
titleset._modelMatrix = m;

我们是可以通过改变他的模型矩阵(_modelMatrix) 就可以修改一个模型的位置,这里可以参考《webgl 编程指南》中的内容

这里面说,一个三维场景中,要包含:视图矩阵,投影矩阵,模型矩阵。

视图矩阵 : 规定了我们观察者,是从何角度(视角)来观察这个三维场景
投影矩阵: 因为我虽然我在描述一个三维场景,但是我们最终还是在一个二维屏幕上去展示的画面。
模型矩阵: 就包含了,这个模型的各种变换,平移,旋转,缩放。

这三个矩阵也有统称为: MVP矩阵

所以模型矩阵就是描述这个模型的平移,旋转,缩放的变换。

3. 如何将一个 3D Tiles 模型调整到指定的位置
const boundingSphere = titleset.boundingSphere;
// 获取这个3D Tiles的包围球
const offset = Cesium.Cartesian3.fromDegrees(116.416342, 39.920912, 300); // 目的位置
const translation = Cesium.Cartesian3.subtract(offset, boundingSphere.center, new Cesium.Cartesian3());
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
4. 调整它的高度
let height = 300; // 新的高度
var cartographic = Cesium.Cartographic.fromCartesian(tileset.boundingSphere.center);
var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude, cartographic.height);
var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, cartographic.latitude,height);
var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);

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

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

相关文章

ROM和RAM概念

一、存储器特性 1)易失性:掉电数据会丢失,通常指RAM; RAM分为SRAM、DRAM SRAM:静态RAM,只要上电数据就不会丢失; DRAM:动态RAM,需要每隔一段事件刷新数据,否…

宽量程双计数器测量方法

如要测量计数器信号的数字频率或周期,可使用双计数器方法测量宽量程信号。该方法适于待测量信号的范围较广且整个范围都需要较高测量精度的情况。关于使用宽量程测量方法提高测量精度的详细信息,见量化误差章节。也可使用该方法测量比计数器时基频率更高…

linux磁盘已满,查看哪个文件占用多

使用df -h查看磁盘空间占用情况 使用sudo du -s -h /* | sort -nr命令查看那个目录占用空间大 然后那个目录占用多 再通过sudo du -s -h /var/* | sort -nr 一层层排查,找到占用文件多的地方 如果通过以上方法没有找到问题所在,那么可以使用 lsof |…

python 实用函数——collections模块之Counter()

collections模块之Counter() Counter: 便捷快速计数(支持所有存储结构),将元素计数,并返回一个字典,key为元素,value为该元素的数量,与count不同,count() 只会记录输入元素的数量 演示&#x…

UI自动化测试工具工作原理是怎样的?

随着软件开发的不断演进,保障软件质量成为了至关重要的一环。在这个过程中,UI自动化测试工具崭露头角,为开发团队提供了一种强有力的方式来确保应用程序的稳定性、功能性和兼容性。本文将深入探讨UI自动化测试工具的定义、工作原理以及其在提…

mybatis数据输入-零散的简单类型数据

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

版本控制系统Git学习笔记-Git基本知识介绍

目录 前言一、版本控制系统1.1 什么是版本控制系统1.2 本地版本控制系统1.3 集中化的版本控制系统1.3 分布式版本控制系统 二、Git简介2.1 数据处理方式2.2 几个特点2.2.1 几乎所有操作都是本地执行2.2.2 Git保证完整性2.2.3 Git一般只添加数据 2.3 Git中文件状态2.3.1 三种文件…

拼图游戏制作

2.创建用户界面 package domain; /** * ClassName: User * Author: Kox * Data: 2023/2/2 * Sketch: */ public class User { private String username; private String password; public User() { } public User(String username, String p…

防火墙之iptables

iptables概述 1.Linux 系统的防火墙 :IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables组成。 2.主要工作在网络层,针对IP数据包。体现在对包内的IP地址、端口、协议等信息的处理上。 -netfilter/iptables关系: netfil…

JS获取字符串里最长的回文字符串

方法一 使用双指针配合枚举 /*** param {string} s* return {string}*/ const longestPalindrome s > {const LEN s.lengthif (LEN < 2) {return s}let maxStr /*** param left * param right * returns */const findPalindrome (left, right) > {while (left &…

day32_Git

今日内容 零、 复习昨日 零、 复习昨日 一、引言 在单人开发过程中&#xff0c;需要进行版本管理&#xff0c;以利于开发进度的控制。 在多人开发过程中&#xff0c;不仅需要版本管理&#xff0c;还需要进行多人协同控制。 版本控制(VS) SVN GIT 二、介绍 Git是一个开源的…

rabbitmq-server-3.11.10.exe

rabbitmq需要erlang环境 otp_win64_25.1.exe erlang-CSDN博客 https://www.rabbitmq.com/download.htmlhttps://www.rabbitmq.com/install-windows.htmlhttps://github.com/rabbitmq/rabbitmq-server/releases/download/v3.11.10/rabbitmq-server-3.11.10.exe C:\Users\Admi…

Spine深入学习 —— 换装

Spine深入学习————换装 数据对象和实例对象的关系与区别 数据对象是无状态的&#xff0c;可在任意数量的骨架实例间共用。有对应实例数据的数据对象类名称以“Data”结尾&#xff0c;没有对应实例数据的数据对象则没有后缀&#xff0c;如附件、皮肤及动画。 实例对象有许…

python-GC机制、装饰器、生成器、迭代器、三元表达式、列表生成式、生成器表达式、函数递归、面向对象、

1 基础知识 1.1 GC机制 Python的垃圾回收&#xff0c;其实高级的语言都有自己的垃圾回收机制简称GC&#xff0c; python当中主要通过三种方式解决垃圾回收的方式&#xff0c;引用计数、标记清除、分代回收。引用计数&#xff1a;如果有新的引用指向对象&#xff0c;对象引用计…

产品运营常用的ChatGPT通用提示词模板

产品定位和规划&#xff1a;请帮助我明确产品的定位和规划&#xff0c;包括目标市场、用户需求、竞争对手等方面的内容&#xff0c;以便我能够更好地制定产品运营策略。 产品设计和开发&#xff1a;请帮助我进行产品设计和开发&#xff0c;包括功能设计、界面设计、用户体验等…

Nodejs 第二十章(fs 下)

概述 在 Node.js 中&#xff0c;fs 模块是文件系统模块&#xff08;File System module&#xff09;的缩写&#xff0c;它提供了与文件系统进行交互的各种功能。通过 fs 模块&#xff0c;你可以执行诸如读取文件、写入文件、更改文件权限、创建目录等操作&#xff0c;Node.js …

壹财基金杨振骏:资本如何做好Web3布局?

Web3行业是革命性的时代风口&#xff0c;目前全球各个发达国家都在争先抢占Web3的主导地位。2023年&#xff0c;香港特区政府大力支持Web3行业的政策落地&#xff0c;缔造了良好的发展环境&#xff0c;鼓励有意布局Web3行业的机构和创业者积极参与。 然而&#xff0c;Web3行业…

ply前端

ply 是 eBPF 的 front-end 前端工具之一&#xff0c;专为 embedded Linux systems 开发&#xff0c;采用 C 语言编写&#xff0c;只需 libc 和内核支持 BPF 就可以运行&#xff0c;不需要外部 kernel 模块&#xff0c;不需要 LLVM&#xff0c;不需要 python。 ply 由瑞典工程师…

【数据结构】——排序

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

bugku题解记录2

文章目录 哥哥的秘密黄道十二官where is flag一段新闻 哥哥的秘密 给出了一个qq&#xff0c;那就去看看呗 hint里面说 收集空间信息——相册——收集微博信息——相册——解题——相册——提交flag 那看看空间先 盲文&#xff1a; hint&#xff1a;密码时地人 旗帜存在相册里…