倾斜摄影在mapbox中的坐标转换
倾斜摄影属于3dtiles的一种格式,模型的文件类型为b3dm。
查看tileset.json文件中的包围盒坐标如下:

可以知道倾斜摄影的坐标系为墨卡托坐标系,单位为米。
而mapbox中的坐标系为左手坐标系,坐标原点在左上角,单位为像素。如下图所示:

可以通过一下坐标变化,将墨卡托坐标系转换为mapbox坐标系:
mat4 modelMat; state.getModelMatrix(modelMat); //米转像素 const double WEBMERCATOR_EXTENT = 20037508.3427892; // 地球半径 double worldSizeMeter = WEBMERCATOR_EXTENT * 2.0; // 米的世界范围 double scale = Projection::worldSize(state.getScale()) / worldSizeMeter; matrix::scale(modelMat, modelMat, scale , scale , 1.0); // 转换到mapbox坐标系(原点在左上角) mat4 matMapbox; matrix::identity(matMapbox); matMapbox[12] = WEBMERCATOR_EXTENT; matMapbox[13] = WEBMERCATOR_EXTENT; matrix::scale(matMapbox, matMapbox, 1.0, -1.0, 1.0); matrix::multiply(modelMat, modelMat, matMapbox); //将模型坐标转换为世界坐标(原点在center) matrix::multiply(modelMat, modelMat, tileMat);