2015-04-28 8 views
10

Sto creando un progetto con three.js in cui l'utente può modificare dinamicamente le dimensioni del modello. La domanda è molto simile a this one che ho postato, ma temo che non funzioni perché stavolta sto lavorando con un'estrusione di una forma planare. Il frammento di codice in cui ho dei problemi è la seguente:Scala dinamicamente l'oggetto impilato su un altro

cubeY.onChange(function(value){ 
    cube.scale.y = value; 
    cube.position.y = (cubeHeight * value)/2; 
    roof.position.y = (roofHeight * roof.scale.y)/2 + cube.position.y * 2 - roofHeight;});; 
roofY.onChange(function(value){ 
    roof.scale.y = value; 
    roof.position.y = ((roofHeight * value) + cube.position.y * 2) - value * roofHeight; 
}); 

Come si può osservare, quando cambio roof.scale.y, anche l'oggetto si muove, ma dovrebbe rimanere fissato alla parte superiore del cubo. Sai cosa sto sbagliando? Questo è un jsfiddle con il codice completo.

Grazie in anticipo per le vostre risposte!

+0

Questa è la terza domanda sullo stesso argomento ma ognuna leggermente più difficile della precedente. Ma tutti con lo stesso comune denominatore. Problemi con l'allineamento di scala e oggetto basato su quella scala. Forse stai pensando a questo problema tutto sbagliato. Penso che sarebbe più facile se la tua GUI effettivamente manipolasse le dimensioni reali dei tuoi elementi, non la loro scala. Se conosci le dimensioni esatte degli elementi dell'oggetto, è molto più facile allineare altri elementi su di essi o intorno a loro. Solo un pensiero. – gaitat

+0

@gaitat Lo so, ma tutti gli esempi che ho trovato stavano manipolando la scala di un oggetto, non le sue dimensioni. Ma per favore, se sai che alcuni esempi me li mostrano. Grazie!! –

+1

Aggiornato per il ridimensionamento y: [jsfiddle] (http://jsfiddle.net/zeLxp81b/3/) – uhura

risposta

4

L'altezza del cubo in scala è cubeHeight * cube.scale.y e il tetto è roofHeight * roof.scale.y.

posizione di punto del cubo (altezza del cubo) è cube.position.y + cubeHeight/2 * cube.scale.y o solo centro geometrico cubeHeight * cube.scale.y

del tetto non è la coordinata centro del sistema in modo la sua posizione è l'altezza del cubo meno metà altezza del tetto

cube.position.y + cubeHeight/2 * cube.scale.y - roofHeight/2 * roof.scale.y 

Jsfiddle example

Problemi correlati