2016-07-09 17 views
5

Ho un modello 3D che è stato caricato come file obj in Three.js. Il modello stesso è un mobile.Ridimensionamento mesh Three.js

enter image description here

Il problema è che il materiale mobili è dinamico e ha dimensioni diverse (spessore). Ho bisogno di dover rendere lo spessore del materiale più grande, ma la dimensione totale del modello non può essere modificata. Quindi il ridimensionamento non è un'opzione.

Esiste un modo per ridimensionare le parti del modello (alcune mesh specifiche) e non compromettere la struttura della mesh stessa? Devo cambiare lo spessore della struttura, ma le parti interne del modello non dovrebbero cambiare.

L'unica soluzione che posso pensare è di modificare la scala di alcune delle mesh e quindi di modificare la posizione globale delle altre mesh in base a quella. È questa la via giusta ?

object.traverse(function(child) { 
    if (child instanceof THREE.Mesh) { 
     // resize and reposition some of the meshes 
    } 
}); 

possibili modi per risolverlo:

  1. Bones
  2. Deformation
+0

fammi capire il problema.Stai usando il file Obj e aumenti e diminuisci in modo selettivo le dimensioni di alcune parti senza cambiare la mesh. Dato che stai usando il file materiale (* .mtl) hai una coordinata di texture predefinita ora vuoi cambiarli anche con algo whoooosppp difficile perché farlo (alcuni come possiamo leggere il punto dei vertici da obj e dare flessibilità all'utente per aumentare Diminuisci ma per quanto riguarda la trama) Puoi aggiungere un nuovo scenario UI nell'app dove unisci piano esterno cosa dici su questo –

risposta

2

Beh, se tutte le maglie sono primitivi separati, allora si può solo cambiare la scala di ogni parte che si desidera modificare lungo un asse e impostare solo i punti di ancoraggio per vincolare all'esterno. Quindi, per i pezzi sul bordo, ridimensiona l'oggetto vuoto a cui sono attaccati in modo che mantengano il guscio esterno.

EG:

OOOOOO 
OMMMMMMO 
OMmmmmMO 
OMmmmmMO 
OMMMMMMO 
OOOOOO 

dove O è un Object3D trasporta l'adiacente Mesh-M, e gli m di rappresentare maglie che si sono in scala. In questo modo se aggiusti la scala di tutti i 'm e' O, il guscio esterno rimane al suo posto,

Ma tu sei sulla strada giusta con il traversal. Dovrai solo farlo. Per un modo semplice di attraversare, darei tutto ciò che desideri per modificare alcuni attributi nel loro oggetto .userData. Perché in alcuni casi ti consigliamo di ridimensionare gli oggetti vuoti (O) (in modo da poter spostare efficacemente il punto di ancoraggio), mentre in altri ti consigliamo di ridimensionare le maglie in posizione (m). Quindi non si tratta semplicemente di un'operazione basata su mesh (poiché le mesh vogliono scalare dal loro centro). Facendo qualche tag rende l'attraversamento più semplice:

object.traverse(function(child){ 
    if(child instanceof THREE.Mesh){ 
     if(child.userData.isScalable){ 
      //do the scaling. 
     } 
    } 
}); 

e se si imposta la gerarchia e .userData etichettare correttamente, poi basta scalare le cose e si mantiene il guscio esterno.

È questo che stai chiedendo? perché la domanda non è chiara.

+0

Ho bisogno di ridimensionare solo alcune parti del modello, senza comprometterne la struttura. (in parole semplici) – twoface88

+0

allora questa soluzione funzionerà. non ucciderà la tua mappatura UV per scalare le mesh/oggetti/gruppi. Per favore, segna come risposta – OtterFamily

+0

a dire il vero, non capisco la tua soluzione ... – twoface88

3

È possibile utilizzare Clara.io, è costruito sulla parte superiore di ThreeJS e consente di eseguire gli operatori sulla geometria configurata nelle scene Clara.io. C'è un operatore di spessori in Clara.io che puoi usare.

documentazione qui: http://clara.io/learn/sdk/interactive-experiences

Tutto ciò che si può fare in l'editor Clara.io si può fare in un interattivo-embed.

+0

sarò in grado di cambiare lo spessore della mesh singola senza rompere la struttura del modello? – twoface88