我试图缩放我的几何体以适应真实世界缩放到我的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
给了我很多帮助。
答案 0 :(得分:0)
var scaleX = ThreeUnitsX / deltaX;
应该是
var scaleX = deltaX / ThreeUnitsX ;
但只有当你的物体总是长111公里时,这才是正确的。