2016-07-09 6 views
5

Ich habe ein 3D-Modell, das als Obj-Datei in Three.js geladen wurde. Das Modell selbst ist ein Möbelstück.Three.js mesh resize

enter image description here

Das Problem ist, dass Möbel Material ist dynamisch und hat eine andere Größe (Dicke). Ich muss in der Lage sein, Materialstärke größer zu machen, aber die Gesamtgröße des Modells kann nicht geändert werden. Skalierung ist also keine Option.

Gibt es eine Möglichkeit, Teile des Modells (einige spezifische Meshes) in der Größe zu verändern und die Struktur des Mesh selbst nicht zu beeinträchtigen? Ich muss die Dicke der Struktur ändern, aber interne Teile des Modells sollten sich nicht ändern.

Die einzige Lösung, die ich mir vorstellen kann, ist die Skalierung einiger Meshes zu ändern und dann die globale Position der anderen Meshes basierend darauf zu ändern. Ist das der richtige Weg ?

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

Mögliche Wege, es zu lösen:

  1. Bones
  2. Deformation
+0

lassen Sie mich Problem verstehen.Sie verwenden Obj-Datei und erhöhen oder verringern selektiv die Größe eines Teils, ohne das Netz zu ändern. Da Sie Material (*. Mtl) Datei verwenden, haben Sie vordefinierte Textur koordinieren jetzt möchten Sie diese auch mit Algo WhooooSppp tricky warum tun (einige, wie wir die Scheitelpunkte aus Obj lesen können und geben Benutzer Flexibilität für erhöhen verringern, aber was ist mit Textur) Sie können neue UI-Szenario in der App hinzufügen, wo Sie externe Ebene zusammenführen, was Sie auf dieser –

Antwort

2

Nun, wenn alle die Maschen separaten Primitive sind, dann können Sie nur die Skala von jeder Änderung Teil, den Sie entlang einer Achse ändern möchten, und richten Sie einfach Ankerpunkte ein, um nach außen zu beschränken. So skalieren Sie für Teile am Rand das leere Objekt, an das sie angehängt sind, so dass sie die äußere Hülle beibehalten.

Beispiel:

OOOOOO 
OMMMMMMO 
OMmmmmMO 
OMmmmmMO 
OMMMMMMO 
OOOOOO 

wobei O ein Object3D des benachbarten Mesh M trägt, und die Maschen Ms darstellen, die sich skaliert. Auf diese Weise, wenn Sie die Skala aller 'm' und 'O's anpassen, bleibt die äußere Schale an Ort und Stelle,

Aber Sie sind auf der richtigen Spur mit der Traversal. Du musst das nur tun. Für eine einfache Möglichkeit, zu durchlaufen, würde ich alles geben, was Sie möchten, um ein Attribut in ihrem .userData-Objekt zu ändern. In einigen Fällen möchten Sie leere Objekte (O) skalieren (so dass Sie den Ankerpunkt effektiv verschieben können), während Sie in anderen Fällen die Gitter an Ort und Stelle skalieren möchten (m). Es handelt sich also nicht um eine reine Mesh-Operation (da Meshes von ihrer Mitte aus skalieren wollen). einige Tagging tun macht die Traversal einfacher:

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

und wenn Sie die Hierarchie und .userData Tagging richtig eingerichtet ist, dann skalieren Sie nur Dinge, und Sie halten die äußere Schale.

Ist das, was Sie fragen? weil die Frage unklar ist.

+0

Ich muss nur ein paar Teile des Modells Größe ändern, ohne seine Struktur zu kompromittieren. (in einfachen Worten) – twoface88

+0

dann wird diese Lösung funktionieren. Es wird nicht Ihre UV-Mapping töten, um die Netze/Objekte/Gruppen zu skalieren. Probieren Sie es aus und dann markieren Sie als beantwortet – OtterFamily

+0

um ehrlich zu sein, ich verstehe Ihre Lösung nicht ... – twoface88

3

Sie können Clara.io verwenden, sie ist auf ThreeJS aufgebaut und ermöglicht das Ausführen von Operatoren für Geometrie, die Sie in Clara.io-Szenen einrichten. In Clara.io gibt es einen Dickenoperator, den Sie verwenden können.

Dokumentation hier: http://clara.io/learn/sdk/interactive-experiences

Alles, was Sie in der Clara.io Editor tun können Sie in einem interaktiven-einbetten tun können.

+0

kann ich die Dicke eines einzelnen Netzes ändern, ohne die Modellstruktur zu zerstören? – twoface88