【问题标题】:cesium 3D model orientation and rolling铯3D模型定向和滚动
【发布时间】:2020-05-09 15:09:39
【问题描述】:

我是 Cesium 的新手,我有一个 3D 模型,我将其显示如下:

this.model = scene.primitives.add(Cesium.Model.fromGltf({
  url : './assets/cesium/myPlane.glb',
  modelMatrix : modelMatrix,
  minimumPixelSize : 128,
  maximumScale : 20000
}));
  1. 如何更改模型的“滚动”(倒置显示)
  2. 如何将其“头部”更改为 wame 方向作为 moovingf 方向(如果平面向左移动,则其头部将向左改变角度)

谢谢,
拉里

【问题讨论】:

  • 一些问题:modelMatrix 的定义是什么,你可以省略吗? GLB 文件是 glTF 1.0 还是 2.0 文件?模型是否遵循 glTF 方向约定(2.0 中 +Y 向上,+Z 向前)?
  • 你也使用scene.primitives,你有什么理由需要它而不是实体?我之所以问,是因为实体有一个名为 VelocityOrientationProperty 的辅助函数,它可能会做你想做的事,请参阅 Interpolation Demo 的第 70 行。
  • 我看到了这个演示,但我不明白如何根据我的需要修改它。我需要 3 件事:1. 为飞机提供 long、lat、alt,然后飞机将移动到该位置。 2. 有能力控制飞机方向(所以它会指向正确的飞行方向) 3. 将相机移动到飞机位置(这样我就可以通过点击按钮来跟踪它/取消跟踪它)
  • @emackey 你能帮忙吗?
  • 我认为你对一个问题的要求太高了。我和 Stack Overflow 上的其他人无法为您编写应用程序,这听起来像是您在 cmets 中要求的。 SO对此有指导方针。尝试编写一个独立示例,尽可能多地显示所需内容,然后在该示例中找到特定问题或错误以发布相关问题。

标签: 3d cesium


【解决方案1】:

您可以将模型加载为 czml 并设置方向。见下文:

    var position = Cesium.Cartesian3.fromDegrees(<lon>, <lat>, <alt>);
    var pheading = Cesium.Math.toRadians(<heading>);
    var pitch = Cesium.Math.toRadians(0);
    var roll = Cesium.Math.toRadians(0);
    var hpr = new Cesium.HeadingPitchRoll(pheading, pitch, roll);
    var orientation = new Cesium.ConstantProperty(Cesium.Transforms.headingPitchRollQuaternion(position, hpr));


    var czml = [
        {
            "id": "document",
            "name": "CZML Model",
            "version": "1.0"

        }, {
            "id": id,
            "name": id,

            "position": {
                "cartographicDegrees": [
                    lon, lat, alt
                ]
            },

            "model": {

                "gltf": <gltfpath>



            }

        }
    ];

    var promise = olcesium.nc.viewer.dataSources.add(Cesium.CzmlDataSource.load(czml));
    promise.orientation = orientation;
    promise.then(function (dataSource) {

        for (var i = 0; i < dataSource.entities.values.length; i++) {
            dataSource.entities.values[i].orientation = orientation;
        }

    });

【讨论】:

    【解决方案2】:

    这听起来像是您的模型与 Cesium 的轴约定不正确对齐。你有两个选择:

    1. 在建模软件(blender、3ds max 等)中重新定位模型。
    2. 引入一个中间坐标系,在您的应用中重新定向模型(不过需要一些数学知识)。

    我的建议是尝试第一个选项,如果这不起作用或您无法修改模型,请尝试第二个选项。

    提示:对于在 Cesium 中调试模型,inspector 确实很有帮助,因为您可以显示参考框架。这是您的模型应该是什么样子的sandbox

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 2019-12-09
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      相关资源
      最近更新 更多