Ein Modell mit mehrerer „einzelnen“ geometrischen Formen ermöglicht jedes dieser einzelnen Formen zu verändern.

Wie genau dies beim Erstellen eines 3D Modells funktioniert, kann ich nicht erklären, zumal ich beim Export ins Collada Format schon die merkwürdigsten „Zusätze“ erleben konnte (Swift 3D erzeugte diese beim Exportieren aus Cinema3D). Im Beispiel habe ich manuell die Struktur aufgeräumt und in diesem Fall jeweils zusätzliche Unterelemente für jede geometrische Form entfernt. Das folgende Bild zeigt die unsaubere Version, head existiert 2x ineinander verschachtelt:

< node id="head1"> und < node id="head">
auch der < body> tag ist nicht notwendig:

Und so sieht head gesäubert aus:

Ich empfehle immer wieder sich mit der Struktur eines collada xml Modells vertraut zu machen.
Entfernt man die zusätzlichen „Objekte“ nicht, so werden diese auch von Papervision als DisplayObject3D ausgegeben und der Spaß fängt damit an herauszufinden, welche nun welche sind, die ich z.B. bei setChildMaterialByName angeben soll:

Papervision traced dann auch alle 5×2 geometrische Formen und ein Ober Element body:

INFO: DisplayObject3D: COLLADA_Scene
INFO: DisplayObject3D: body
INFO: DisplayObject3D: head1
INFO: DisplayObject3D: head
INFO: DisplayObject3D: hand
INFO: DisplayObject3D: hand1
INFO: DisplayObject3D: ub
INFO: DisplayObject3D: ub1
INFO: DisplayObject3D: lb1
INFO: DisplayObject3D: lb
INFO: DisplayObject3D: shoe
INFO: DisplayObject3D: shoe1

Nach dem Entfernen der zusätzlichen Knoten verbleiben 5 geometrische Formen:

INFO: DisplayObject3D: COLLADA_Scene
INFO: DisplayObject3D: head
INFO: DisplayObject3D: hand
INFO: DisplayObject3D: ub
INFO: DisplayObject3D: lb
INFO: DisplayObject3D: shoe

So kann man jetzt vernünftig arbeiten und im Beispiel

- ohne Textur mit Phong Shader – ist jedes Elementes anders eingefärbt, so dass man gut die einzelnen geometrischen Formen erkennen kann.
Die Button wechseln zwischen 2 verschiedenen Kopf Texturen:

var bitmap:Bitmap = new _imageAsset() as Bitmap;
bitmapMaterial_cloth = new BitmapMaterial(bitmap.bitmapData, true);

var bitmap_bump:Bitmap = new _imageAsset_bump() as Bitmap;	
bitmapMaterial_bump = new BitmapMaterial(bitmap_bump.bitmapData, true);

private function bumpDae(event : MouseEvent) : void {
         dae.setChildMaterialByName("head", bitmapMaterial_bump);
}

private function clothDae(event : MouseEvent) : void {
        dae.setChildMaterialByName("head", bitmapMaterial_cloth);
}

Zum Schluß möchte ich noch auf das Air Tool von Mark I. Ross zum optimieren von Daes hinweisen.

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

 
Get Adobe Flash player