2014-09-12 3 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); 

Я хочу поблагодарить chandlerp от #THREE.JS ИРЦ за помощь мне много.

ответ

0
var scaleX = ThreeUnitsX/deltaX; 

должен быть

var scaleX = deltaX/ThreeUnitsX ; 

Но это только правильно, если ваш объект должен быть всегда 111km долго.