将几何体缩放到现实世界

时间:2014-09-12 22:43:32

标签: javascript three.js

我试图缩放我的几何体以适应真实世界缩放到我的3D场景 我得到了地图的左上角和地图的右上角 然后我使用Google地图投影将这些点转换为点,然后相互减去这些点以获得地图的增量 然后我使用该数字并将其除以我的几何边界框deltaX 问题是代码没有产生正确的缩放 放大到地图越多,缩放越小,缩小越多,缩放越大。应该是相反的 我也不知道这实际上是否正确地缩放它,就像在现实生活中一样。

现在我这样做:

var bounds = MAP3D.map.getBounds();
var projection = MAP3D.map.getProjection();

var x1Length = projection.fromLatLngToPoint(new google.maps.LatLng(
    bounds.getNorthEast().lat(),
    bounds.getSouthWest().lng()
));
var x2Length = projection.fromLatLngToPoint(new google.maps.LatLng(
    bounds.getNorthEast().lat(),
    bounds.getNorthEast().lng()
));
var ThreeUnitsX = Math.abs(x2Length.x - x1Length.x);


if (
    MAP3D.ObjectManager.WellList[i].LOD.objects[0]
        .object.geometry.boundingBox == null
) {
    MAP3D.ObjectManager.WellList[i].LOD.objects[0]
        .object.geometry.computeBoundingBox();
}

var boundingBox = MAP3D.ObjectManager.WellList[i].LOD.objects[0]
    .object.geometry.boundingBox;

var deltaX = boundingBox.max.x - boundingBox.min.x;
var scaleX = ThreeUnitsX / deltaX;

me.WellList[i].LOD.scale.set(scaleX, scaleX, scaleX);

我要感谢chandlerp irc的#THREE.JS给了我很多帮助。

1 个答案:

答案 0 :(得分:0)

var scaleX = ThreeUnitsX / deltaX;

应该是

var scaleX = deltaX / ThreeUnitsX ;

但只有当你的物体总是长111公里时,这才是正确的。