2014-09-12 52 views
0

我正在嘗試縮放我的幾何圖形以適合放大到我的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); 

我想從#THREE.JS IRC感謝chandlerp幫了我很多。

回答

0
var scaleX = ThreeUnitsX/deltaX; 

應該

var scaleX = deltaX/ThreeUnitsX ; 

但是,這是唯一正確的,如果你的對象應該總是111公里長。