| |||||||
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
| Performance Problem in Papervision 3D mit BitmapMaterial
Hallo Flashgemeinde, ich habe ein kleines Performanceproblem in Papervision. Sobald ich ein BitmapMaterial benutze, die smooth-Eigenschaft von diesem Material auf true setze habe ich immer dann kleine Performanceeinbrüche wenn das Bitmap zur Kamera Flach steht. Also wenn das Bitmap in so einem Winkel steht das man es nur noch ganz schmal sieht. Normalerweise müsste gerade dann wenn das Objekt kaum noch zu sehen ist, die Performance am besten sein. Aber genau an dieser Stelle Stock die Animation bei mir ganz kurz. Ich denke mir mal das es wieder für genau diese Zwecke eine bestimmte Einstellung gibt. Habe auch schon Seiten gesehen, auch in PV3D gemacht worden sind, die viel mehr Bilder verwenden und es trotzdem zu keinen Performanceeinbrüchen kommt, natürlich auch mit smooth=true. Das Image ist nur 180*211 Pixel. Hier ist meine Demo. Hier der Code Code: package Papervision3DExercise
{
import caurina.transitions.*;
import flash.filters.BlurFilter;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.shadematerials.CellMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Cone;
import org.papervision3d.objects.primitives.Cube;
public class TweenerExample extends PaperBase {
private var pointLight:PointLight3D;
private var cube:Cube;
private var cube2:Cube;
private var cone:Cone;
private var object:DisplayObject3D;
private var materials:MaterialsList;
private var materials2:MaterialsList;
private var wireMat:WireframeMaterial;
private var cellMat:CellMaterial;
private var bitmapMat:BitmapMaterial;
private var colMat:ColorMaterial;
private var counter:Number = 0;
public function TweenerExample():void {
init(0, 0, true);
}
override protected function init3d():void {
//reflectionView wird eingestellt
reflectionView.surfaceHeight = -170;
reflectionView.viewportReflection.blendMode = "hardlight";
reflectionView.viewportReflection.alpha = 0.15;
reflectionView.viewportReflection.filters = [new BlurFilter(8, 8)];
//Licht wird erzeugt und transformiert
pointLight = new PointLight3D();
pointLight.x = 2000;
pointLight.y = 2000;
pointLight.z = -3000;
//Materialien werden erzeugt
materials = new MaterialsList();
materials2 = new MaterialsList();
colMat = new ColorMaterial(0x550011, 1);
wireMat = new WireframeMaterial(0x55559, 100, 1);
cellMat = new CellMaterial(pointLight, 0xaa3344, 0, 8);
bitmapMat = new BitmapFileMaterial("./resource/images/Jarek.jpg", true);
bitmapMat.smooth = true;
bitmapMat.interactive = true;
materials.addMaterial(cellMat, "all");
materials2.addMaterial(colMat, "all");
materials2.addMaterial(bitmapMat, "front");
materials2.addMaterial(bitmapMat, "back");
//Objekte werden erzeugt
object = new DisplayObject3D();
cone = new Cone(wireMat, 40, 160);
cube = new Cube(materials, 70, 70, 160, 2, 2, 2);
cube2 = new Cube(materials2, 130, 7, 160, 1, 1, 1);
//Objekte werden in "object" hinzugefügt
object.addChild(cone, "cone");
object.addChild(cube, "cube");
object.addChild(cube2, "cube2");
//objekte werden positioniert
object.moveBackward(200);
cone.z = -160;
cone.x = -160;
cube.z = -160;
cube.x = 160;
cube2.z = 200;
camera.y = 200;
camera.rotationX = 15;
scene.addChild(object);
//Ereignisse für plane werden gesetzt
cube2.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, Cube2OverHandler);
cube2.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, Cube2OutHandler);
cube2.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, Cube2ClickHandler);
}
/*--------------------------------
Handler für Plane
--------------------------------*/
private function Cube2ClickHandler(event:InteractiveScene3DEvent):void{
Tweener.addTween(cube2, {x:100, time:1, transition:"easeInElastic"});
Tweener.addTween(cube2, {z:100, time:1, transition:"easeInElastic"});
Tweener.addTween(cube2, {y:100, time:1, transition:"easeInElastic"});
Tweener.addTween(cube2, {x:300, time:1, delay:1, transition:"easeOutElastic"});
Tweener.addTween(cube2, {z:300, time:1, delay:1, transition:"easeOutElastic"});
Tweener.addTween(cube2, {x:0, time:1, delay:2, transition:"easeInOutBounce"});
Tweener.addTween(cube2, {z:200, time:1, delay:2, transition:"easeInOutBounce"});
Tweener.addTween(cube2, {y:0, time:1, delay:2, transition:"easeInElastic"});
}
private function Cube2OverHandler(event:InteractiveScene3DEvent):void{
reflectionView.buttonMode = true;
trace("over");
}
private function Cube2OutHandler(event:InteractiveScene3DEvent):void{
reflectionView.buttonMode = false;
trace("out");
}
override protected function processFrame():void {
object.yaw(1);
}
}
} |
| | |
| | #2 (permalink) |
| Neuer User Registriert seit: Nov 2003
Beiträge: 29
| hat keiner eine Antwort ?
Da dieser Beitrag schon länger existiert und keiner eine Antwort parat hatte erschleicht sich mir langsam das Gefühl, dass das Problem nur bei mir existiert. Mir ist eingefallen das ich ein paar Probleme mit der Taktfrequenz bei meiner Grafikkarte hatte, vielleicht liegt es auch daran. Mir würde es auch helfen wenn mir jemand mitteilen könnte ob der Fehler bei ihm auch auftaucht oder nicht. |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Jan 2009
Beiträge: 2
|
Hallo, ich habe gerade dein Problem gelesen und die Demo ausprobiert. Bei mir tritt das von dir beschriebene Problem ebenfalls auf. Ich hatte diesen Performanceeinbruch auch schon mal, allerdings mit wesentlich größeren Grafiken und habe mir deshalb nicht solche Gedanken darüber gemacht. Dass es bei solch einer klein aufgelösten Grafik aber auch auftritt finde ich jetzt sehr merkwürdig. Ich vermute, dass es für solch starke Verzerrungen sehr aufwendig ist die neuen Bildpunkte zu berechnen, wirklich wissen tu ich das allerdings auch nicht ![]() Vielleicht kann ja jemand der mehr Ahnung von 3D-Algorithmen hat mal darauf eingehen. Mich würde eine Lösung auch interessieren, vielleicht kann ich mein Projekt dann auch noch etwas optimieren. |
| | |
| | #4 (permalink) |
| Neuer User Registriert seit: Jan 2009
Beiträge: 2
|
Mir ist noch was eingefallen. Oft macht es Sinn während Animationen die stage.quality auf LOW zu setzen. Das verbessert die Performance bei Papervision allgemein sehr. Wenn die Animation beendet ist einfach wieder zurück auf HIGH oder BEST setzen. Es ist allerdings lediglich ein Workaround für das von dir beschriebene Problem. Wenn deine Objekt, wie im Beispiel, ständig in Bewegung sind, sieht das leider nicht so gut aus (kein Antialiasing), aber vielleicht hilft dir der Ansatz ja weiter. |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Aug 2003
Beiträge: 24
|
Ich habe oben beschriebenes Problem ebenfalls. Bei mir ist es nur so, dass sich mehrere Karten in einem Kreis drehen, wodurch ständig eine Karte "dünn" zu sehen ist. Da geht die Performance total den Bach runter. Leider :-/ Eine kleine Hilfe ist es, wenn man die Segmente auf 1 stellt. Wenn jemand ne andere Idee hat, immer her damit. |
| | |
![]() |
| Lesezeichen |
| Stichworte |
| bitmap, papervision 3d, performance, pv3d |
| Themen-Optionen | |
| Ansicht | |
| |