Zurück   Flashforum > Software > 3D

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 12-01-2009, 11:06   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2006
Beiträge: 83
Zeitgesteuerte Animationen

Hallo,

ich baue zurzeit meine Website. Sie enthält einige Colladas mit zusammengerechnet ungefähr 600 Triangles. Ich verwende als Renderer bisher die BasicRenderEngine, da bisher noch keine schwerwiegenden Z-Buffer Probleme aufgetreten sind. Tests ergaben, dass ich das wohl auch lieber so lassen sollte...

Mein Problem liegt nun bei folgendem:

Ich möchte die Site mit zeitgesteuerten Animationen füttern, was ja deutlich mehr sinn macht, als Bildgesteuerte Animationen.

Da Flash aber ja meines Wissens nach keinerlei Multithreading unterstützt, ist selbst die zeitgesteuerte Animation sehr ungenau. Ich habe einen Timer gebaut, der alle 10 ms sein Timer-Event feuert (bzw. feuern soll). Das sind also 100 aktualisierungen pro Sekunde. Innerhalb der Timermethode ist meine Kamerasteuerung und eine simple Rotationsanimation.

Obwohl wahrscheinlich eher belanglos für das Problem, hier das Coding der Timermethode

PHP-Code:

       
private function onTimerAnimation(t:TimerEvent):void
       
{
            if(
this.colladaLoaded)
            {
                
this.schallplatte.rotationY += 5.5;                
                
                
//soll hittest werden, momentan egal
                //var nadel:DisplayObject3D = this.model.children["Nadel_None"];
                //var platte:DisplayObject3D = this.schallplatte.children["Pin_None"];            
            
}
            
            if(
this.turnKeyDown)
            {
                if(
this.firstClick)
                {
                    
this.camYaw = -1.576;
                    
this.camPitch 1.524;
                    
                    
this.firstClick false;    
                }
                else
                {
                    
this.camYaw -= (this.startMouseCoords.this.viewport.mouseX) / 1000;
                    
this.camPitch -= (this.startMouseCoords.this.viewport.mouseY) / 1000;    
                }                    
                    
                
//update theta and phi based on your mouse positions, then update the camera position
                
var theta:Number this.camYaw;
                var 
phi:Number =  this.camPitch;            
                
                var 
newX:Number this.camDist Math.cos(theta) * Math.sin(phi);
                var 
newY:Number this.camDist Math.cos(phi);
                var 
newZ:Number this.camDist Math.sin(theta) * Math.sin(phi);
            
                
this.camera.newX;
                
this.camera.newZ;
                
this.camera.newY;
                
                
camera.lookAt(this.schallplatte);                            
            }
            
            
this.startMouseCoords.this.viewport.mouseX;
            
this.startMouseCoords.this.viewport.mouseY;            
      } 
Nebenbei läuft auch noch ein onEnterFrame, in dem ich nur die Render Methode des Renderers aufrufe. Ich hatte diese erst auch im Timer, habe sie aber nun testweise mal in das andere Event gelegt. Macht keinen spürbaren Unterschied.

Dass der Timer nicht sehr genau sein kann, ist logisch, da sein Counting ja wegen des single threadings länger unterbrochen wird, während Flash die Timermethode ausführt. Das Rechenintensivste ist mit Abstand sicherlich die Rendermethode, die auch noch nebenher läuft, aber auch ja laufen muss, wegen der permanenten Rotationsanimation. Es handelt sich da um eine Schallplatte..

Ich brauche aber eine möglichst zeitgenaue Animation, da ich bei meiner Website nicht davon ausgehen kann, dass jeder Rechner sie mit der gleichen Framerate darstellen können wird. Klar, ich optimiere so gut ich kann, spare Triangles so gut ich kann, aber ich brauche schon auch noch ein wenig Optik.

Was ich nun gerne hätte, wären Inspirationen und Optimierungsvorschläge aus euren Erfahrungen mit solchen Situationen.

Gruß und Dank
Jacques

Geändert von jacquesr (12-01-2009 um 11:08 Uhr) Grund: die gute, alte Rechtschreibung
jacquesr ist offline   Mit Zitat antworten
Alt 19-01-2009, 08:17   #2 (permalink)
Neuer User
 
Registriert seit: Nov 2005
Beiträge: 548
Ich benutze nur das Enter Frame Event, messe die Zeit seit dem letzten gerenderten Frame (flash.utils.getTimer) und drehe/bewege entsprechend weit.
joeydee ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele