| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Mar 2004
Beiträge: 18
| Papervision3D-Anfänger hat Texturing-Probleme
Ich bin kein AS 3.0 Anfänger, PV3D-Anfänger schon. Ich habe aus Blender3D das Maskottchen "Suzanne" (wer Sie nicht kennt, Suzanne ist ein Affenkopf) als 3DS-Datei exportiert und via folgendem Quellcode in Papervision importiert: Code: package
{
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.materials.BitmapColorMaterial;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.shaders.FlatShader;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.parsers.Max3DS;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
public class Main extends Sprite
{
private var renderer:BasicRenderEngine = new BasicRenderEngine();
private var camera:Camera3D = new Camera3D();
private var scene:Scene3D = new Scene3D();
private var viewport:Viewport3D = new Viewport3D(0, 0, true, true);
private var testFigur:Max3DS;
public function Main():void
{
super();
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.frameRate = 50;
camera.z = -2;
var cm:ColorMaterial = new ColorMaterial();
cm.fillColor = 0x00FF00;
var ml:MaterialsList = new MaterialsList();
ml.addMaterial(cm);
testFigur = new Max3DS('Suzanne');
testFigur.load('../3ds/Suzanne.3ds', ml, null);
scene.addChild(testFigur);
this.addChild(viewport);
renderer.renderScene(scene, camera, viewport);
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
if (!testFigur) return;
testFigur.rotationY++;
renderer.renderScene(scene, camera, viewport);
}
}
} Gruß und Dank MCQ // Edit: Hat sich erledigt, ich habe Suzanne in Blender ein Material zugewiesen, nun geht es. Geändert von MCQ (08-12-2008 um 18:16 Uhr) |
| | |
| | #2 (permalink) | |
| ich versuchs ja Registriert seit: Sep 2007 Ort: Kassel
Beiträge: 281
|
Ich greif das Thema jetzt einfach mal auf... Laut dem vorherigem Post kann man mit Papervision3D *.3DS Dateien direkt einlesen und verarbeiten? Ist das richtig? Und die texturen aus der 3DS Datei werden auch mit eingebunden und benutzt? Danke für die kleine Info...
__________________ Zitat:
Udo Lindenberg und Jan Delay | |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Nov 2006
Beiträge: 152
|
Max3DS Import: http://drawlogic.com/2008/04/11/3ds-...n-from-away3d/ Texturen kannst auch einbinden. Was mich jetzt nur interessieren würde: Beim Import in papervision wird keine meiner Textureinstellungen übernommen. (Shader etc.) Auf was muss ich da achten? Muss ich die Texturen nachträglich in papervision "einshaden"? Wie hat das mit collada-files funktioniert? Geändert von grizu (12-12-2008 um 13:20 Uhr) |
| | |
| | #5 (permalink) |
| asFlasher Registriert seit: Jul 2006
Beiträge: 1.136
|
Hallo, vor genau dem selben Problem stehe ich auch gerade Habe ein Model (collada) in PV3D geladaden, welches transparente Flächen hat. Doch werden diese nicht angezeigt, also keine transparenz, nur die Grundfarbe. Ich weiß noch nicht wie man das ändern kann. 1) irgendwie die einzelnen Flächen der collada ansprechen, nur wie 2) externe texturen nutzen, sieht dann aber nicht mehr so schön aus (mapping) 2) weitere lösungen suchen/finden Denn ich würde auch gern, die Farbe der Fläche zur Laufzeit in Flash per AS ändern, doch habe ich auch dafür noch keinen Weg gefunden, da ich 1) noch nicht Lösen konnte. Falls hier jemand bescheid weiß, bin ich über jeden Hinweis froh ![]() Gruß ksw24 |
| | |
| | #7 (permalink) |
| asFlasher Registriert seit: Jul 2006
Beiträge: 1.136
|
Hey... ...super Danke. Ich gestehe nicht genau zu wissen wie ich das nun anzuwenden habe. Als Beispiel: ActionScript:
Besten Dank auf jeden Fall...ksw24 |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Nov 2006
Beiträge: 152
|
sry ich kann dir nur sagen wies mit Max3DS geht ![]() Wenn du das file importierst, zeigt er dir alle Unterobjekte des 3DS-Files mit Namen im Ausgabefenster an. Die kannst du dann ansprechen und das material setzen: ActionScript:
ich habs nur auf diese Weise geschafft. Warum ich nicht direkt beim Laden ein Material zuweisen kann, ist mir ein Rätsel... edit: ok, bin grad selber auf was draufgekommen... klar dass ich erst die einzelnen unterobjekte ansprechen muss, weil das 3dsfile ja nur ein container ist... Geändert von grizu (12-12-2008 um 16:51 Uhr) |
| | |
| | #9 (permalink) | ||
| ich versuchs ja Registriert seit: Sep 2007 Ort: Kassel
Beiträge: 281
|
Hi grizu, Hab mal eine Frag zu deinem Script. Zitat:
Oder anders gefragt: wenn ich eine 3dS Datei einlade und das ganze kompiliere, dann werden die einzelnen teile automatisch getraced. Wie kann ich auf die einzelnen Teile zugreifen? Kann ich das überhaupt? Wird dein "kugel" dort auch genannt? Ich möchte das Objekt gern haben, um ihm ein anderes Material zu verpassen. Ich hab schonmal das hier (auszug): PHP-Code: mfg Netterkerl1981
__________________ Zitat:
Udo Lindenberg und Jan Delay | ||
| | |
| | #10 (permalink) |
| Neuer User Registriert seit: Nov 2006
Beiträge: 152
|
Genau, wenn du mit max3ds lädst, tracet er dir alle child-Objekte aus. Und mit den Namen, die du in deinem 3d-Programm vergibst, kannst du die child-Objekte ansprechen und Materialien vergeben. Also die Max3DS-Instanz ist nix anderes als ein Container für deine Szene, in der du mit "getChildByName" auf deine Szene-Objekte zugreifen kannst. Dein trace sollt eigentlich gehen, wenn du ein Objekt hast, das "OberteilMi" heisst. Ist das vielleicht noch ein Unterobjekt von irgendwas anderem? Hab jetzt selber länger nix mehr mit dem max-import gemacht... lg grisu |
| | |
| | #11 (permalink) | |
| ich versuchs ja Registriert seit: Sep 2007 Ort: Kassel
Beiträge: 281
|
Hey danke für die schnelle Antwort!! Dann muss ich mal untersuchen, ob das evtl. ein Unterobjekt ist. Der Trace von PPV3D ist in etwa soetwas: PHP-Code: Ich habe es auch schonmal mit "childrenList()" versucht... Der Befehl sollte doch eigentlich alle Namen ausgeben, die als Objekt vorhanden sind... Dabei gibt er mir leider auch nur "" aus. Irgendwas muss ich falsch machen... Hast du evtl noch eine Idee? Edit: Oder versuche ich zu früh auf diese Objekte zuzugreifen... Mein Trace kommt ja vor dem standart-trace... Ich forsche mal in die Richtung...
__________________ Zitat:
Udo Lindenberg und Jan Delay Geändert von netterkerl1981 (07-02-2009 um 08:59 Uhr) Grund: noch ein Einfall (nach dem Duschen ;-)) | |
| | |
| | #12 (permalink) | |
| ich versuchs ja Registriert seit: Sep 2007 Ort: Kassel
Beiträge: 281
|
Hi grizu!! (und @all) Ich hab die Lösung gefunden. Das Objekt war zu dem Zeitpunkt noch gerendert. Ich habs jetzt mit einem Timeout gelöst. Jetzt wird das Objekt zwar erst gerendert und dann umgefärbt, aber das ist verkraftbar... Gibt es dazu auch ein Event, dass ich benutzen kann? (Aber ich suche erstmal selber) Hier meine bisherige Lösung: PHP-Code: Ansonsten schonmal DANKE!!! mfg Netterkerl1981
__________________ Zitat:
Udo Lindenberg und Jan Delay | |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |