Cesium Primitive 旋转、缩放与移动操作

Cesium Primitive 旋转、缩放与移动操作

在 3D 地球或地图应用中,Cesium 是一个强大的开源 JavaScript 库,常用于可视化地理空间数据。它提供了强大的功能,支持高效地显示和操作 3D 地图。Cesium 中的 Primitive 是一个用于渲染图形的基础类,支持几何体的展示(如球体、线条、面等)。本文将介绍如何在 Cesium 中对 Primitive 进行旋转、缩放和移动操作。

1. Cesium 中的 Primitive

在 Cesium 中,Primitive 是一种用于渲染自定义几何体的对象,它与 Entity 不同,后者是更加高层次的抽象,适用于常见的几何体,如点、线、面等。Primitive 更适合用于处理复杂的几何体,或者需要高效渲染的场景。

通常,Primitive 的操作会结合 Matrix4 变换矩阵来进行,包括旋转、缩放和移动。

2. 旋转(Rotation)

旋转操作可以通过 Matrix4 来实现,旋转矩阵是用来对物体进行角度变换的。通常,旋转是围绕某个轴进行的(如 x 轴、y 轴或 z 轴)。

示例代码:绕 Z 轴旋转 Primitive
const viewer = new Cesium.Viewer('cesiumContainer');

// 创建一个几何体对象
const geometry = new Cesium.CylinderGeometry({
  length: 100.0,
  topRadius: 50.0,
  bottomRadius: 50.0
});

// 创建一个 Primitive 对象
const primitive = new Cesium.Primitive({
  geometryInstances: new Cesium.GeometryInstance({
    geometry: geometry,
    modelMatrix: Cesium.Matrix4.IDENTITY
  }),
  appearance: new Cesium.PerInstanceColorAppearance({
    flat: true,
    translucent: false
  })
});

// 将 primitive 添加到场景中
viewer.scene.primitives.add(primitive);

// 创建旋转矩阵:绕 Z 轴旋转 45 度
const rotationMatrix = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(45)));

// 设置模型的变换矩阵
primitive.modelMatrix = Cesium.Matrix4.multiply(primitive.modelMatrix, rotationMatrix, new Cesium.Matrix4());

在上述示例中,Matrix4.fromRotationTranslation 用于创建一个旋转矩阵,旋转角度为 45 度,围绕 Z 轴进行。通过修改 primitive.modelMatrix,实现了 Primitive 的旋转。

3. 缩放(Scaling)

缩放操作用于改变物体的尺寸。与旋转类似,缩放也使用变换矩阵来处理,通常是在现有的矩阵上应用缩放比例。

示例代码:对 Primitive 进行缩放
// 创建一个缩放矩阵
const scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(2.0, 2.0, 2.0));

// 设置模型的变换矩阵,实现缩放
primitive.modelMatrix = Cesium.Matrix4.multiply(primitive.modelMatrix, scaleMatrix, new Cesium.Matrix4());

在这个示例中,Matrix4.fromScale 创建了一个缩放矩阵,该矩阵会将物体的大小放大 2 倍。然后,我们通过 Matrix4.multiply 将缩放矩阵应用到原来的变换矩阵中。

4. 移动(Translation)

移动操作通过变换矩阵中的平移部分来实现。平移是指物体在空间中的位置改变。

示例代码:移动 Primitive
// 创建一个平移矩阵
const translationMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(1000000.0, 0.0, 0.0));

// 设置模型的变换矩阵,实现平移
primitive.modelMatrix = Cesium.Matrix4.multiply(primitive.modelMatrix, translationMatrix, new Cesium.Matrix4());

这里,Matrix4.fromTranslation 创建了一个平移矩阵,表示将物体沿 X 轴平移 1,000,000 单位。然后,使用 Matrix4.multiply 将平移矩阵应用到 primitive 的当前变换矩阵。

5. 组合旋转、缩放与移动

Cesium 中的变换矩阵是可以组合的,多个变换(旋转、缩放、平移)可以按顺序应用于同一个物体。只需将多个变换矩阵相乘即可。

示例代码:组合旋转、缩放与平移
// 旋转矩阵
const rotationMatrix = Cesium.Matrix4.fromRotationTranslation(Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(45)));

// 缩放矩阵
const scaleMatrix = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(2.0, 2.0, 2.0));

// 平移矩阵
const translationMatrix = Cesium.Matrix4.fromTranslation(new Cesium.Cartesian3(1000000.0, 0.0, 0.0));

// 将旋转、缩放与平移矩阵按顺序组合
let modelMatrix = Cesium.Matrix4.multiply(rotationMatrix, scaleMatrix, new Cesium.Matrix4());
modelMatrix = Cesium.Matrix4.multiply(modelMatrix, translationMatrix, new Cesium.Matrix4());

// 设置 primitive 的变换矩阵
primitive.modelMatrix = modelMatrix;

在这个示例中,我们先后应用了旋转、缩放和平移矩阵。Matrix4.multiply 会按顺序将这些变换组合成一个最终的变换矩阵,赋值给 primitive.modelMatrix,从而实现复合的旋转、缩放和平移效果。

6. 总结

通过使用 Matrix4 变换矩阵,Cesium 提供了强大的工具来旋转、缩放和移动 Primitive 对象。以下是常用的操作步骤:

  1. 旋转:使用 Matrix3Matrix4 的旋转函数来创建旋转矩阵。
  2. 缩放:使用 Matrix4.fromScale 来创建缩放矩阵。
  3. 平移:使用 Matrix4.fromTranslation 来创建平移矩阵。
  4. 组合变换:通过 Matrix4.multiply 将多个变换矩阵组合在一起,按顺序应用到物体上。

这些变换操作可以帮助开发者灵活地控制和展示 3D 地图上的物体,提升用户体验。

TilesBuilderTilesBuilder提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

请添加图片描述

相关推荐

探索 Cesium 的未来:3D Tiles Next 标准解析

是由 Cesium 和其他合作伙伴共同推动的全新 3D 空间数据标准,是对传统 3D Tiles 格式的升级和扩展。它旨在支持更高效的渲染、更丰富的应用场景以及更强的数据可扩展性。通过对 3D Tiles 的性能优化和灵活性增强,3DTiles Next 将大大提升大规模三维数据的存储、传输与渲染效率,满足未来更为复杂的空间数据需求。3D Tiles Next 标准的出现标志着 Cesium 在大规模三维数据渲染领域迈出了重要一步。

ismartcube的博客 1871

优化你的 3D Tiles:性能与质量的平衡

优化 3D Tiles 是一个不断权衡的过程,需要在性能与质量之间找到平衡点。通过合理的数据组织、高效的压缩技术、智能的渲染策略和用户体验优化,可以显著提升三维场景的交互性和流畅性。希望本文提供的技巧能帮助你更好地掌控 3D Tiles 的优化,创造出令人惊叹的三维应用场景。

ismartcube的博客 1915

Cesium PBR增强(一)

Cesium 1.123的更新引入了一种全新的“程序化”光照系统,基于 CesiumJS 的图像基照明(Image-Based Lighting,IBL)方法,旨在显著提升默认光照环境的真实感和视觉质量。通过动态生成环境贴图和相关光照值,该系统能够实时响应场景中的位置和光源变化,为模型和 3D 瓦片(3D Tilesets)提供更加真实的渲染效果。

ismartcube的博客 1843

Cesium 给大量建筑贴上PBR纹理

是一个非常强大的工具,它能够将SHP文件中的建筑物数据转化为3D Tiles格式,并支持贴上PBR纹理。通过合理的配置和优化,你可以在Cesium中高效地展示大量带有PBR纹理的建筑物模型,并确保在不同设备上都能获得流畅的渲染体验。

ismartcube的博客 1871

Cesium 实例化绘制教程

实例化绘制是一种 GPU 渲染技术,它允许在一次绘制调用中渲染多个对象,而无需为每个对象单独发起绘制调用。每个实例可以共享同一个几何形状,同时具有各自独立的变换(位置、旋转、缩放)和属性。在 Cesium 中,这种技术被用于优化大量同类图元(如箱体、圆柱、球体等)的绘制。Cesium 的和提供了对实例化的支持。实例化绘制是提升 Cesium 性能的重要技术,尤其适用于大规模场景中渲染重复几何体的需求。通过合理使用和Primitive,不仅能有效提高渲染效率,还能保持良好的用户体验。

ismartcube的博客 1621

Cesium 获取某点地形高度

是一个用于获取多个地理位置精确地形高度的函数,非常适合用于需要高精度地形数据的场景。它通过提供对地形数据源的精确访问,帮助开发者实现更精细的地理信息分析。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 3084

Cesium 当前位置矩阵的获取

在 Cesium 中,获取位置矩阵是一个关键步骤,通常用于将物体从地球的经纬度坐标转换为三维场景中的位置。通过上述步骤,我们可以根据地球上的经纬度坐标生成对应的变换矩阵,并使用该矩阵进行坐标转换。Cesium 提供了强大的 API,帮助开发者轻松处理地球坐标系到世界坐标系的转换,极大地方便了 3D 地图和地理信息系统的开发。Cesium 提供了强大的 API 来处理这些坐标系之间的转换,最常用的转换方法是将经纬度转换为。,它返回的是一个 4x4 矩阵,表示从 ENU 坐标系到 ECEF 坐标系的转换。

ismartcube的博客 1291

Cesium CZML绘制Entity

Cesium 提供了一个强大的API,支持渲染地球、地图以及许多地理空间数据,适用于实时数据可视化、地理信息系统(GIS)和航天工程等领域。Entity 是Cesium中的基本绘制单元,表示场景中的一项物体,可以是点、线、面,甚至是更复杂的 3D 模型或路径。通过 CZML 文件,你可以以时间序列的形式描述Entity的属性,如位置、颜色、大小等。通过使用CZML格式,Cesium能够高效地渲染复杂的时间序列数据,使得地理空间可视化更加生动和富有表现力。

ismartcube的博客 1436

Cesium 绘制大长度线时避免变成弧线

在 Cesium 中,ArcType是一个枚举类型,定义了线段(Polyline)的绘制方式。(默认):默认的弧线类型,绘制的是大圆弧线,即最短路径的弯曲线路。:绘制的是等航线(Rhumb Line),是一种恒定角度的路径,适用于航海和航空等场景。:不使用弧线,而是直接绘制两点之间的直线,忽略地球的曲率。在 Cesium 中,使用ArcType设置可以灵活控制如何绘制两点之间的线段。通过设置为,可以避免大长度线段变成弯曲的弧线,直接绘制直线,特别适用于需要精确表示两点直线连接的场景。相反,使用或。

ismartcube的博客 1791

Cesium 动态 Polygon 编写教程(使用 Primitive)

Cesium 是一个功能强大的 3D 地球引擎,提供了多种可视化方式,包括纹理、地形、矢量图层等。Cesium 支持 WebGL,可以在现代浏览器中运行。

ismartcube的博客 1839

Cesium K-means自动聚合点的原理

在 Cesium 中,K-means 聚类可以用来自动将密集的地理坐标点聚合成较少的代表性点,减少需要渲染的点数,提高性能并改善用户体验。具体来说,Cesium 使用 K-means 聚类算法将地理坐标点聚合成多个代表性的点,渲染时只显示聚合后的结果,从而提高浏览器的渲染效率。每个聚合点代表该簇内的所有点的“中心”,使得聚合后的点比原始点集合更少,同时保留了大部分的空间分布信息。在聚合点的渲染过程中,Cesium 可以提供交互功能,允许用户点击或鼠标悬停在某个聚合点上时,展示该点代表的原始数据。

ismartcube的博客 1055

cesium体渲染概述(一)

初始化与着色器更新:检查并初始化来自 provider 的数据,并更新自定义着色器。形状更新与检查:检查和更新体素形状、变换及边界框。遍历更新:更新遍历信息,判断是否需要重新渲染。调试绘制与裁剪:在调试模式下绘制边界框,并根据 NDC 空间的 AABB 判断对象是否超出视口。计算与更新渲染矩阵:更新视图和投影矩阵、方向矩阵、摄像机矩阵等。选择并推送渲染命令:根据渲染模式选择合适的绘制命令并推入渲染命令队列。Cesium中的体渲染是一个复杂但高度优化的过程,涉及从数据加载到渲染命令生成的各个环节。

ismartcube的博客 2348

Cesium RTree空间索引建立

RTree是一种非常有效的空间数据索引结构,能够处理大规模空间数据并支持高效的查询操作。通过将空间对象的包围盒组织成树形结构,RTree可以大幅提高范围查询和邻近查询的性能。在Cesium中,RTree可以作为空间索引的一部分,用于加速地理数据的查询,尤其是在处理大量的三维模型和地理信息时。通过在Cesium中实现RTree,开发者可以显著提高地理数据查询的效率,改善用户体验。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1040

Cesium 后处理组合

Cesium 的后处理是通过机制实现的。一个是后处理效果的基本单元,它允许你在渲染管线中插入自定义的后处理操作。这些效果可以通过创建一个后处理阶段来实现,然后将其添加到中。纹理输入:后处理阶段的输入纹理,通常是场景的渲染结果。着色器:后处理阶段的核心部分,定义了如何处理输入纹理。混合模式:控制输入和输出的图像如何结合。通过组合多个后处理阶段,开发者可以创建丰富的视觉效果。

ismartcube的博客 1150

详解 Cesium的地形格式terrain

terrain量化网格是一种高效的地形数据存储方式,它将地形高度数据(如 DEM 或数字高程模型)进行空间分割,将高程值通过量化压缩到较小的整数范围。这样做的好处是,减少了数据存储的大小,提升了处理速度。量化网格利用层次化的切片结构,使得系统可以根据用户的视图动态加载需要的地形部分。以下是.terrain结构字段类型字节数说明1. 头部信息CenterXdouble8 bytes瓦片中心的地心固定坐标系 X 坐标CenterYdouble8 bytes瓦片中心的地心固定坐标系 Y 坐标。

ismartcube的博客 3594

Cesium 自定义 Primitive 的实现与应用

Cesium 是一个强大的开源 3D 地球引擎,提供了高度可定制化的功能,用于显示地图、地理空间数据以及 3D 模型等。在 Cesium 中,Primitive是一个关键概念,它代表了对一个图形或地理对象的低级描述。默认的Primitive主要用于绘制标准几何体,如立方体、球体等,但 Cesium 还允许用户创建自定义Primitive,以满足复杂或特殊的需求。本文将介绍如何在 Cesium 中创建和使用自定义Primitive,以及一些实际应用场景。

ismartcube的博客 1598

体积云Shader编写思路

体积云的Shader编写涉及云层密度和法线的计算、光线步进、光照与阴影的处理以及透明度和颜色的合成。通过合理的步进和优化策略,能够实现真实而动态的云层效果。核心是通过不断步进计算每个点的密度和光照,逐步得到整体云层的表现。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1517

3D Tiles 之 Geometry Error 介绍

在 3D Tiles 数据格式中,几何错误(Geometry Error)是指由于几何体简化或分块(tiles)处理过程中,产生的可视差异。简而言之,几何错误是表示某个 Tile 的简化几何体与其源几何体之间的偏差,这种偏差通常会影响渲染效果。屏幕空间误差(Screen-Space Error, SSE)。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。屏幕空间误差(SSE)是一种评估和度量3D Tiles 中几何简化的有效性和准确性的方法。

ismartcube的博客 1547

cesium特效扩散圆

今天主要和大家介绍一下cesium中怎么实现一个扩散圆的效果!

ismartcube的博客 764

3DTiles之使用customShader调整风格

允许你选择不同的光照模型。或者,你也可以选择 UNLIT 渲染,这样模型就没有光照效果。

ismartcube的博客 1878

如何编译 Cesium 源码

通过以上步骤,您可以成功地从 GitHub 上下载 Cesium 源代码并在本地进行编译。对于开发人员来说,编译 Cesium 源码有助于定制功能,或者调试某些问题。如果您只是想使用 Cesium 进行开发,而不需要编译源代码,您也可以直接从 CDN 或下载预构建版本进行使用。编译的 Cesium 版本可以直接在您的应用中引用,或者部署到 Web 服务器上,供其他用户访问。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1919

cesium 3DTiles之pnts格式详解

点云(Point Cloud)瓦片格式用于高效流式传输大规模点云数据,常用于 3D 可视化中。每个点由位置(Position)和可选的属性定义,这些属性用来描述点的外观(如颜色、法线等)或应用特定的元数据。在 3D Tiles 的术语中,每个点被称为一个“特征”(Feature)。Point Cloud 瓦片本身是一个二进制块,采用小端字节序(Little Endian)。

ismartcube的博客 2232

3DTiles之i3dm介绍

3D Tiles 是一种用于高效存储和传输三维城市、建筑、地形、点云等空间数据的开放标准格式。i3dm(Intel 3D Model)是 3D Tiles 中用于表示三维模型(如建筑物或其他对象)的一个子格式。i3dm 格式的出现,解决了大规模三维城市数据传输和渲染的性能瓶颈问题,使得开发者能够更加高效地展示和处理这些复杂的三维数据。本文将详细介绍 i3dm 格式的基本结构、特性、应用场景以及与其他 3D Tiles 格式的关系。

ismartcube的博客 1848

3DTiles之cmpt介绍

3D Tiles是一个用于表示大规模 3D 地理空间数据的开放格式,它能够高效地处理和呈现地理空间场景中的各种复杂对象,如城市建模、地形和其它 3D 数据。为了进一步优化数据流式传输并支持异构数据集的结合,3D Tiles 引入了复合瓦片(Composite Tile,简称cmpt格式。该格式使得不同类型的瓦片可以组合成一个复合瓦片,从而减少请求次数并优化数据加载策略。提供一个高效、兼容、优化的数据转换工具,一站式完成数据转换、数据发布、数据预览操作。

ismartcube的博客 1774

3DTiles快速入门

3DTiles是一种针对大规模三维场景的优化格式,主要用于存储和传输高效的3D模型数据。建筑物:包括建筑的几何形状、纹理、材质等。地形数据:高精度的地形数据可以帮助提供更真实的虚拟世界。点云数据:如激光雷达(LiDAR)扫描数据,能够精确描述现实世界的几何形态。3D城市模型:高效存储大型城市区域的3D模型。3DTiles使用层级的方式组织数据,按需加载不同分辨率的瓦片,能够有效避免一次性加载大量数据带来的性能瓶颈。

ismartcube的博客 1867

3DTiles之b3dm介绍

b3dm(Binary 3D Model)文件是3DTiles标准中的一种用于存储三维模型的二进制格式。它的设计目的是为了高效地存储和传输包含几何数据、纹理、材料等内容的3D模型,特别适用于大规模的三维城市建模和地理信息系统(GIS)应用。与传统的基于文本的3D格式(如OBJ、FBX等)相比,b3dm文件提供了更加高效的存储和渲染性能,特别是在处理大量复杂数据时,能够显著减少加载时间和内存使用。b3dm文件是3DTiles标准中的一种重要格式,专为大规模的三维模型设计,能够高效地存储、传输和渲染3D数据。

ismartcube的博客 3325

如何在 Cesium 中批量种树(i3dm 转换)

在三维 GIS 可视化中,使用 Cesium 批量种树是一种常见的场景应用。例如,在数字城市项目中,需要在大面积区域内高效地展示树木。然而,由于树木数量巨大,直接加载单个树模型会导致性能问题。因此,使用 i3dm (Instanced 3D Model) 格式可以极大地提高渲染效率。本文将详细介绍如何在 Cesium 中通过 i3dm 转换实现批量种树。

ismartcube的博客 821

SHP转3D Tiles并在Cesium中加载

在三维地理信息系统(3D GIS)中,使用3D Tiles格式来展示大规模的地理数据已经成为一种标准。3D Tiles的主要优势在于其针对大数据量的高效存储和传输方式,适合在浏览器端展示复杂的三维场景。而SHP(Shapefile)作为传统的GIS数据格式,通常用于存储矢量地理数据。本文将介绍如何将SHP格式的数据转换为3D Tiles格式,并在Cesium中进行加载和展示。

ismartcube的博客 2260

生成Cesium地形数据

在地理信息系统(GIS)领域,地形数据的生成是构建三维地球应用的关键步骤。本文将介绍如何使用自定义开发的转换器软件,将高程数据转换为Cesium可用的地形格式。

ismartcube的博客 577

Cesium之Shader简介

Cesium 是一个强大的开源 JavaScript 库,广泛用于创建3D地球和地图应用。其图形渲染能力依赖于 WebGL,Shader 在这一过程中起着至关重要的作用。本文将对 Cesium 中的 Shader 进行简要介绍,包括其基本概念、类型以及在 Cesium 中的应用。在 Cesium 中,开发者可以通过自定义 Shader 来实现特定的视觉效果。创建着色器代码:编写顶点着色器和片段着色器的 GLSL 代码。将着色器附加到材质。

ismartcube的博客 908
上一篇: Cesium 获取某点地形高度
下一篇: Cesium 实例化绘制教程
智方科技
智方科技 三维图形技术、三维GIS引擎软件 三维图形技术、三维GIS引擎软件
博客等级 码龄4年 3037粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值