Cesium 1.109 中获取 glTF 模型关节:Entity 与 Primitive 两种方法

本文将介绍如何在 Cesium 1.109 中,分别使用 Entity 和 Primitive 加载 glTF 模型,并获取模型的关节信息。

1. 使用 Entity 加载 glTF 模型并获取关节javascript// 引入 Cesium 库import * as Cesium from 'cesium';

// 创建场景const viewer = new Cesium.Viewer('cesiumContainer');

// 加载 glTF 文件const entity = viewer.entities.add({ name: 'glTF Model', position: Cesium.Cartesian3.fromDegrees(longitude, latitude, height), // 设置模型位置 model: { uri: 'path/to/your/gltf/model.gltf', scale: 1.0, // 设置模型缩放比例 minimumPixelSize: 128 // 设置模型最小像素大小 }});

// 监听模型加载完成事件entity.model.readyPromise.then((model) => { // 遍历关节 model.getNode('jointName').getComputedTransform(); // 获取指定关节变换矩阵}).otherwise((error) => { console.log('加载 glTF 文件时出错:', error);});

代码解释:

  1. 使用 viewer.entities.add() 方法添加一个 Entity,并在 model 属性中设置 glTF 模型的路径和其他参数。2. 使用 entity.model.readyPromise 监听模型加载完成事件。3. 通过 model.getNode('jointName') 获取指定名称的关节对象。4. 使用 joint.getComputedTransform() 获取关节的变换矩阵。

2. 使用 Primitive 加载 glTF 模型并获取关节javascript// 引入 Cesium 库import * as Cesium from 'cesium';

// 创建场景const viewer = new Cesium.Viewer('cesiumContainer');

// 加载 glTF 文件const tileset = new Cesium.Cesium3DTileset({ url: 'path/to/your/gltf/model.gltf'});

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

// 监听模型加载完成事件tileset.readyPromise.then((tileset) => { const model = tileset.model; // 遍历关节 for (let i = 0; i < model.skeleton.length; i++) { const joint = model.skeleton[i]; console.log('关节名称:', joint.name); }}).otherwise((error) => { console.log('加载 glTF 文件时出错:', error);});

代码解释:

  1. 使用 Cesium.Cesium3DTileset 加载 glTF 模型。2. 使用 viewer.scene.primitives.add() 将模型添加到场景中。3. 使用 tileset.readyPromise 监听模型加载完成事件。4. 通过 tileset.model.skeleton 获取模型的骨骼信息,其中包含所有关节。

两种方式的比较:

  • Entity 更适用于单个模型的加载和管理,操作简单。* Primitive 更适用于复杂场景和大量模型的加载,性能更优。

注意事项:

  • 将代码中的 'path/to/your/gltf/model.gltf' 替换为您实际的 glTF 文件路径。* 确保您已正确安装 Cesium 库。

希望本文能帮助您在 Cesium 1.109 中成功加载 glTF 模型并获取关节信息!

Cesium 1.109 获取glTF模型关节:Entity vs Primitive 两种方式详解

原文地址: https://www.cveoy.top/t/topic/CCq 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录