2015-09-07 32 views
6

Ho in questa scena 27 mesh, ognuna delle quali ha un numero associato. Quello con il numero più alto avrà la scala 1. Il resto avrà un valore inferiore a 1 in successione.Come scalare una mesh senza cambiare la posizione?

Quindi voglio che salga di conseguenza ciascuno degli anelli. Il mio problema si verifica quando viene cambiata la posizione di ogni mesh.

Effettivamente è ridimensionato alla dimensione che è dovuta, ma cambia posizione. Sto facendo fatica perché molti schermi si stanno impilando.

ho solo bisogno di salire e rimanere nella stessa posizione come in questo esempio:

stati degli Stati Uniti sono in scala, ma sempre mantenendo la loro posizione. Penso che scalino al centro della figura.

ho creato le maglie (ciascuna chiamate "municipi")

for(var s=0; s< features.features[x].geometry.coordinates[0].length; s=s+1){      
    geometria[x].vertices.push(new THREE.Vector3((((features.features[x].geometry.coordinates[0][s][0])+75.5)*10),(((features.features[x].geometry.coordinates[0][s][1])-5.5)*10),0));         
} 
forma_figura[x]=new THREE.Shape(geometria[x].vertices); 
extrude_geometria[x]=new THREE.ExtrudeGeometry(forma_figura[x],datos_extrusion); 
municipios[x] = new THREE.Mesh(extrude_geometria[x], materialExtrude[x]); 
scene.add(municipios[x]); 

// so I change the scale: 
//formula is the value of scale. The biggest number has escale 1. 
new TWEEN.Tween(municipios[x].scale).to({ x: formula, y: formula }, 1000).start(); 
//this ultimate line is the same: municipios[x].scale.set(formula,formula,formula); 
+0

quindi sono normalmente prima di cambiare la bilancia. http://i.imgur.com/okQQ5Ue.png?1 – velez11

risposta

6

Poiché la posizione di maglia non è al suo centro, o qualunque riferimento che si vuole che sia: se si crea una geometria con i vertici media x componente oltre 100, la sua posizione visibile sarà la sua posizione reale più (100,0,0). Se non hai specificato una posizione per la mesh ((0,0,0) per impostazione predefinita), sembrerà essere (100,0,0) esattamente. Ridimensionandolo per .5, ad esempio, la posizione media sarà a (100,0,0) *. 5 = (50,0,0), facendo in modo che la mesh cambi la sua posizione.

Che cosa deve essere fatto è:

  • sottrarre le coordinate del centro da tutti i vertici. I vertici sono all'interno della geometria , quindi una volta terminato, è necessario impostare geometry.verticesNeedUpdate = true.

  • quindi aggiungere le coordinate del centro alla mesh , per compensare.

Quindi la mesh risultante verrà posizionata al centro senza essere spostata.

ci sono tre diverse possibilità per definire il centro:

  • Three.js possibile centrare la vostra rete automaticamente in base al centro del rettangolo di selezione con geometry.center() e THREE.GeometryUtils.center(geometry).
  • È possibile calcolare il centroide effettuando un ciclo attraverso i vertici una prima volta per ottenere le loro coordinate medie.
  • È possibile che non si desideri né il centro della casella di suoneria, né il centroide, ma un centro personalizzato . Ad esempio, se si ridimensionano le mesh di "persone" e si desidera che i loro piedi tocchino il terreno su qualsiasi scala: sul piano orizzontale il centro desiderato può essere uno dei primi due, ma la sua coordinata verticale deve essere la coordinata verticale più bassa trovata (la molto in basso ai piedi).

Ovviamente se le mesh vengono importate da un software di editor 3D, è possibile farlo anche al suo interno.

+0

Scusami la mia ignoranza ma non capisco. Ho capito che devo spostare tutti i punti mesh delle coordinate locali 0,0,0. http://i.imgur.com/jXM7t63.png. Ho fatto questo: – velez11

+0

municipios [i] .position.x = offsetArray [i] .x; municipios [i] .position.y = offsetArray [i] .y municipios [i] .position.z = offsetArray [i] .z; // offsetArray [i] 0,0,0 è locale per ogni mesh. – velez11

+0

con tutto ciò che ottengo in 0,0,0, dopo aver applicato la scala per ogni mesh e infine ho fatto: municipios [i] .translate.x = 0; municipios [i] .translate.y = 0; municipios [i] .translate.z = 0; – velez11

Problemi correlati