1、通过上面图片标记的信息Z轴朝北,X轴朝西,Y轴朝上,可以得到cesium坐标系是右手坐标系:
2、gltf模型是Y轴朝上,Z轴朝前坐标系,:
3、我们用cesium中entity加载一个模型:
(1) cesium 加载gltf模型如果只乘上位置矩阵,注释model对象中的坐标轴转换得到效果图:
(2) 设置四元数orientation(heading pitch roll 角度)值,cesium中的model对象内部会自动将模型的Y轴转Z轴朝上和Z轴转X轴朝前,就是将模型坐标系变换到三维空间坐标系,示例代码和效果图:
var entity = viewer.entities.add({
position : new Cesium.Cartesian3.fromDegrees(121.52317,31.11436,1000),
orientation:Cesium.Quaternion.fromHeadingPitchRoll(Cesium.HeadingPitchRoll.fromDegrees(0.0,0.0,0.0)),
model : {
uri :'../data/model/GroundVehicle/GroundVehicle.glb',
scale:650,
minimumPixelSize:100,
}
});
(3) 不设置四元数orientation(heading pitch roll 角度)值,首先cesium中 Entity对象的computeModelMatrix方法会执行Transforms.eastNorthUpToFixedFrame 这句代码,意思是先模型的坐标转换到X轴朝东,Y轴朝北,Z轴朝上;然后model对象内部会自动将模型的Y轴转Z轴朝上和Z轴转X轴朝前,最终模型的X轴朝向东,Y轴朝北;最终得到模型朝前方向是东方向,左侧指向北方向。示例代码和效果图:
var entity = viewer.entities.add({
position : new Cesium.Cartesian3.fromDegrees(121.52317,31.11436,1000),
model : {
uri :'../data/model/GroundVehicle/GroundVehicle.glb',
scale:650,
minimumPixelSize:100,
}
});
4、最后使用右手坐标系和第一张图标记的方位很容易推导cesium Transforms.js中坐标系定义:
//由第一个X轴 第二个Y轴 得出Z轴
var vectorProductLocalFrame = {
up: {
south: "east",
north: "west",
west: "south",
east: "north",
},
down: {
south: "west",
north: "east",
west: "north",
east: "south",
},
south: {
up: "west",
down: "east",
west: "down",
east: "up",
},
north: {
up: "east",
down: "west",
west: "up",
east: "down",
},
west: {
up: "north",
down: "south",
north: "down",
south: "up",
},
east: {
up: "south",
down: "north",
north: "up",
south: "down",
},
};