Cesium无法很好地定位GLTF文件

时间:2019-09-13 13:14:38

标签: cesium gltf

我想在铯中显示飓风(大等值面物体)。为此,我在以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
                   }));

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

1 个答案:

答案 0 :(得分:0)

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

// 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文件,以确保模型以其自身的原点为中心,并且没有将某些固定的Earth位置预先烘焙到模型的内部转换中。