【问题标题】:GLTF file not well positioned by CesiumCesium 没有很好地定位 GLTF 文件
【发布时间】:2020-01-15 08:54:36
【问题描述】:

我想在 Cesium 中显示飓风(大等值面对象)。为此,我在 ECEF(地心)投影中重新投影的新 OBJ 文件中转换了一个 OBJ 文件,其中包含代表飓风的等值面的每个顶点的经度、纬度、高度列。

所以最终的 OBJ 文件包含现在每个顶点的 X、Y、Z 代替经度、纬度、高度。在 obj2gltf 最终重新格式化后,我尝试使用以下代码在 Cesium.JS 中显示 GLTF“飓风”文件:

console.log('loading hurricane.gltf';
var mymodel = viewer.scene.primitives.add(Cesium.Model.fromGltf({
                         url : 'data/hurricane.gltf',
                         modelMatrix : Cesium.Matrix4.IDENTITY,
                         asynchronous: false
                   }));

我可以在地球上看到我的飓风,但不是在好位置。我怀疑矩阵的问题。 IDENTITY 矩阵似乎不是一个好的矩阵。我可以尝试制作一个新矩阵,但找不到有关 Cesium 使用的轴方向的足够信息。
我验证了 X、Y、Z ECEF 坐标,它们很好。有没有人遇到过这个问题?

【问题讨论】:

    标签: cesium gltf


    【解决方案1】:

    如果您的 glTF 模型原点位于飓风的中心,您可以使用 Cesium 实体放置它,如下所示:

    // Longitude degrees, Latitude degrees, height in meters
    var position = Cesium.Cartesian3.fromDegrees(-123.0744619, 44.0503706, height);
    var heading = Cesium.Math.toRadians(0);
    var pitch = 0;
    var roll = 0;
    var hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);
    var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, hpr);
    
    var entity = viewer.entities.add({
        name : 'Hurricane',
        position : position,
        orientation : orientation,
        model : {
            uri : 'data/hurricane.gltf'
        }
    });
    viewer.trackedEntity = entity;
    

    Sandcastle 上有更多完整的工作演示。

    但是,如果使用单位矩阵可以在地球表面看到您的飓风,这可能意味着该模型的起源远不靠近飓风中心。您可能需要编辑 glTF 文件,以确保模型以自己的原点为中心,并且没有将某些固定的地球位置预先烘焙到模型的内部变换中。

    【讨论】:

    • 非常感谢,但是模型原点必须是地球中心,因为它的坐标是ECEF。我可以在地球表面看到模型(飓风),但它的位置很糟糕。这就是为什么我认为这是一个矩阵问题。
    • 不,glTF 模型和所有 GPU 图形一样,使用 32 位浮点数作为顶点位置。从地球中心开始,地表各个顶点的精度几乎没有 1 米。当相机移动得足够近以看到各个米时,飓风的形状将“四处晃动”,因为起点在 630 万米之外。您需要飓风附近的原点才能正确显示。
    • Cesium 使用 64 位数学计算从相机到模型原点的关系。但是单个顶点仅使用 32 位来描述从原点到任何特定点的关系。因此,理想情况下,任何模型的原点都应该是模型的中心,或者模型中的某个位置。
    • 再次感谢 EmacKey。我放弃了 ECEF 投影,最后使用了以飓风眼为中心的 EastNorthUp 投影。现在实体的位置就OK了。谢谢!!!
    猜你喜欢
    • 2016-05-01
    • 1970-01-01
    • 2018-11-25
    • 2011-08-05
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    相关资源
    最近更新 更多