| |||||||
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: Nov 2003
Beiträge: 29
|
Hallo Flashforumgemeinde, ich bin ziemlicher Neuling im Bereich PV3D und habe mein erstes Problem. Wenn ich mit 3DSMAX ein Objekt als DAE-Objekt Exportiere und in PV3D ein FlatShaderMaterial bzw. phongMaterial über das Objekt lege wird mein Objekt zerstört dargestellt. Es sieht so aus als würden sich die Normalen bei bestimmten Winkeln invertieren. Hier die Demo mit den Fehler. Hier ist der Quellcode den ich verwende: Code: package Papervision3DExercise
{
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.shadematerials.PhongMaterial;
import org.papervision3d.materials.shaders.PhongShader;
import org.papervision3d.materials.shaders.ShadedMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.parsers.DAE;
public class DaeAnimExample extends PaperBase {
private var object:DAE;
private var pointLight:PointLight3D;
private var materials:MaterialsList;
private var phongShader:PhongShader;
private var shadedMat:ShadedMaterial;
private var phongMat:PhongMaterial;
private var flatMat:FlatShadeMaterial;
private var wireMat:WireframeMaterial;
private var counter:uint;
public function DaeAnimExample():void {
init();
}
override protected function init3d():void {
pointLight = new PointLight3D();
pointLight.x = 1500;
pointLight.y = 2000;
pointLight.z = -3000;
phongMat = new PhongMaterial(pointLight, 0xaaaaaa, 0x222222, 100);
phongMat.oneSide = true;
flatMat = new FlatShadeMaterial(pointLight, 0xbbbbbb, 0x222222);
wireMat = new WireframeMaterial(0);
materials = new MaterialsList();
materials.addMaterial(flatMat, "default");
object = new DAE();
object.addEventListener(FileLoadEvent.COLLADA_MATERIALS_DONE, MaterialsDone);
object.load("./resource/models/aktenkoffer.dae");
object.moveForward(-400);
object.pitch(-15);
scene.addChild(object);
}
private function MaterialsDone(event:FileLoadEvent):void{
//var bitmapMat:BitmapMaterial = new BitmapMaterial(object.getMaterialByName("baseMaterial").bitmap);
//bitmapMat.smooth = true;
object.replaceMaterialByName(wireMat, "default");
}
override protected function processFrame():void {
counter++;
object.yaw(0.5);
}
}
} |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Nov 2003
Beiträge: 29
| bin selber drauf gekommen !
OK, habe herausgefunden wodurch der Fehler verursacht wird. Das hat nichts mit PV3D zu tun sondern es liegt an 3DSMAX. Ich arbeite in 3D Studio Max gerne mal mit den Boolean-Methoden um teile von Objekten herauszuschneiden. Leider ist diese Methode total unzuverlässig und verursacht hauchdünne Triangles indem 2 Vertexes so nah aneinander liegen, dass diese verschmelzen oder sowas in der Art. |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Nov 2003
Beiträge: 29
| doch nicht gelöst !!!
Diesmal habe ich meinen kleinen Koffer im Demo noch einmal neu Modeliert und diemal ohne die Boolean-Methode. Diesmal stimmt die Anzahl der Trialngles. Ich habe keine sehr engel Triangles mehr. Es scheint alles zu stimmen. Habe den Koffer wieder als DAE exportiert neu in PV3D eingefügt aber leider immer noch mit den selben Ergebnis. Diemal bin ich mit meinen Latein am Ende. Also brauche ich doch noch einmal Hilfe für das immer noch bestehende Problem. Ich hoffe jemand weis wodurch das ausgelöst wird. |
| | |
| | #5 (permalink) |
| muh Registriert seit: Apr 2002 Ort: Freiburg / Stuttgart
Beiträge: 4.338
|
Welche Version von PV3D verwendest du denn? Ähnliche Effekte wurden schon diskutiert, helfen dir die Vorschläge dort? (vor allem der letzte Kommentar)
__________________ »Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!) |
| | |
| | #6 (permalink) |
| Neuer User Registriert seit: Nov 2003
Beiträge: 29
|
Danke für die Recherche Janoscharlipp ![]() Aber leider hat mir der Beitrag nicht geholfen da er nur scheinlich was mit meinen Problem zu tun hatte. Aber jetzt weis ich endlich woran es liegt. Es liegt an der BasicRenderEngine. Ich habe mal die QuadrantRenderEngine verwendet und es funktioniert wunderbar. Es ist kein Bug oder Fehler des BasicRenderEngine sondern diese Engine wird wahrscheinlich schneller rechnen dafür aber ungenauer. Es liegt an der Berechnung der Tiefe der einzelnen Triangles, also welches Triangle zuerst gezeichnet wird und welches zuletzt. Da manche von der Reihenfolge später kommen überdecken Sie andere Triangles. Wenn die Reihenfolge natürlich falsch ist, dann kann sowas passieren. Bei runden Objekten mit einen grossen Innenraum funktioniert die BasicRenderEngine auch wunderbar. Bei schmalen Kanten kann es bei bestimmten Blickwinkeln zu einer falschen Reihenfolge führen und somit kommt der unschöne Effekt zustande den ich hier hatte. Ich danke dir trotzdem noch einmal für deine Bemühungen. |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| dae, papervision3d, pv3d, shader |
| Themen-Optionen | |
| Ansicht | |
| |