Aktuelle Zeit: 11.05.2024, 09:39

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Selbstgeschriebener Animator?
BeitragVerfasst: 10.08.2009, 23:35 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Ich will mir einen eigenen Animator schreiben, nur weiss ich nicht wie ich das machen soll. Oder ist ein eigener Animator das gleiche wie ein Benutzerdefinierter Node? Wenn ja, könnte ich mir also einen Node schreiben und den als Animator einem Node unterordnen?

Danke für eure Antworten ^_^

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Selbstgeschriebener Animator?
BeitragVerfasst: 11.08.2009, 06:44 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Also ich hab vor Kurzem meinen ersten eigenen SceneNodeAnimator geschrieben, und das war einfacher als befürchtet. Einfach das Interface ISceneNodeAnimator in einer eigenen Klasse implementieren (http://irrlicht.sourceforge.net/docu/classirr_1_1scene_1_1_i_scene_node_animator.html), und wenn du eine Instanz deiner neuen Klasse als Animator zu einem Node hinzufügst wird die "animateNode" Methode öfter mal aufgerufen, und dort kannst du alles erledigen.

Das es diese Möglichkeit gibt wäre es meiner Meinng nach eine Verschwendung der eh knappen Resourcen, wenn man das in einem eigenen Node erledigen würde (was natürlich auch funktioniert).

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Selbstgeschriebener Animator?
BeitragVerfasst: 11.08.2009, 20:48 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Hm ich hab jetzt mal gegoogelt und auch aufm Englischen Board nach einem Tutorial gesucht, weil ich das nicht ganz verstehe wie das funktioniert, aber ich hab nix gefunden. Kennt jemand vielleicht ein derartiges Tutorial oder könnte mir das erstellen eines eigenen Animators vielleicht detailiert erklären?

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Selbstgeschriebener Animator?
BeitragVerfasst: 12.08.2009, 06:18 
Offline
Benutzeravatar

Registriert: 16.10.2007, 07:56
Beiträge: 229
Wohnort: Regensburg
Na ja, ich könnte meinen selbstgebastelten Animator anbieten: http://www.bulletbyte.de/products.php?sub=irr&show=fpa. Der ist zwar alles andere als perfekt, aber ich denke, du kannst aus dem Quellcode schon erkennen, wie das funktioniert.

Zum Animator: ich wollte eine Kamera haben, die automatisch einem vordefinierten Pfad folgt. Den Pfad kann man mit beliebigen SceneNodes in IrrEdit definieren, und die werden dann einer nach dem anderen abgeflogen. Ich bevorzuge EmptySceneNodes Einfach einen SceneNode mit einem eindeutigen Namen definieren und den Pfad mit Children des Nodes definieren.

Allerdings kann man den Animator nicht in IrrEdit anlegen, der muss im Programmcode erzeugt und einer Kamera zugewiesen werden. Ich denke mal, dass Programm stürzt ab, falls man ihn einem anderen SceneNode als einer Kamera zuweist.

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Selbstgeschriebener Animator?
BeitragVerfasst: 13.08.2009, 13:55 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Danke, hab jetzt ne weile rumprobiert aber es kommt immer der folgende Fehler:

Zitat:
obj\Debug\Engine_Particle.o||In function `_ZN3irr4core12irrAllocatorIcE15internal_deleteEPv':|
\include\IAttributeExchangingObject.h:(.text+0x7b)||undefined reference to `vtable for CSceneNodeEmitterStop'|
\Engine_Particle.o||In function `_ZN21CSceneNodeEmitterStopC1EPN3irr5scene24IParticleSystemSceneNodeEi':|
\Engine_Particle.cpp|4|undefined reference to `VTT for CSceneNodeEmitterStop'|
\Engine_Particle.cpp|4|undefined reference to `vtable for CSceneNodeEmitterStop'|
\Engine_Particle.cpp|4|undefined reference to `vtable for CSceneNodeEmitterStop'|
\Engine_Particle.cpp|4|undefined reference to `vtable for CSceneNodeEmitterStop'|
||=== Build finished: 5 errors, 0 warnings ===|


Und der Code der Klasse/des Animators sieht so aus:

Header Datei:

Code:
#ifndef ENGINE_PARTICLE_H_INCLUDED
#define ENGINE_PARTICLE_H_INCLUDED

#include <irrlicht.h>
#include "Engine_Globals.h"





using namespace irr;

class CSceneNodeEmitterStop : public ISceneNodeAnimator
{
   public:

      //! constructor
      CSceneNodeEmitterStop(int ms);

      //! destructor
      //virtual ~CSceneNodeEmitterStop();

      //! animates a scene node
      virtual void animateNode(ISceneNode* node, u32 timeMs);

      //! Writes attributes of the scene node animator.
      virtual void serializeAttributes(io::IAttributes* out, io::SAttributeReadWriteOptions* options=0) const;

      //! Reads attributes of the scene node animator.
      virtual void deserializeAttributes(io::IAttributes* in, io::SAttributeReadWriteOptions* options=0);

      //! Returns type of the scene node animator
      virtual ESCENE_NODE_ANIMATOR_TYPE getType() const { return ESNAT_UNKNOWN; }

      //! Creates a clone of this animator.
      /** Please note that you will have to drop
      (IReferenceCounted::drop()) the returned pointer after calling
      this. */
      virtual ISceneNodeAnimator* createClone(ISceneNode* node, ISceneManager* newManager=0);

   private:
              int ms;
};

#endif // ENGINE_PARTICLE_H_INCLUDED


CPP Datei:

Code:
#include "Engine_Particle.h"

CSceneNodeEmitterStop::CSceneNodeEmitterStop(int ms)
{
}



Wenn ich die Code Datei leer lassen kommt der oben genannte Fehler nicht, schon wenn ich das was unter "CPP Datei" steht einfüge kommt der Fehler...könnt ihr mir vll sagen was ich ändern muss? (am besten mit erklärung)

Danke

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Selbstgeschriebener Animator?
BeitragVerfasst: 22.08.2009, 13:48 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Hat wirklich keiner ne Idee?

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Selbstgeschriebener Animator?
BeitragVerfasst: 24.08.2009, 02:19 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Sorry für Tripple post :D aber ich habs hinbekommen (dank des englischen Forums ;))

Jetzt hab ich aber wieder ein Problem, ich will den Zeitabstand zwischen der aktuellen Zeit (ausgelesen mit GetTickCount()) mit der der "erstell zeit" errechnen, das klingt simpel und das ist es eigentlich auch aber ich weiss nicht was da falsch läuft.

Code:
void CSceneNodeEmitterStop::animateNode(ISceneNode* node, u32 timeMs)
{
    if(timeMs-timestamp>=lifetime)
    {
            particle_system->getEmitter()->setDirection(vector3df(0,0,0)); //nur zu testzwecken
    }
}


Was ist daran falsch? Ich denke das die aktuelle Zeit die in timeMs gespeichert wird eine andere ist als die, die ich mit GetTickCount() - aus der "time.h" - bekomme und in die Variable "timestamp" speichere. Wenn ja, wie kann ich das problem lösen? GetTickCount() lässt sich innerhalb dieser Methode nicht aufrufen und wo ich die Zeit die in timeMs gespeichert wird herbekomme weiss ich auch nicht -.-

Danke für eine (hoffentlich schnelle ;)) Antwort.

_________________
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Selbstgeschriebener Animator?
BeitragVerfasst: 24.08.2009, 19:02 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
Guck dir doch z.B. mal den Code der animateNode()-Funktion der Klasse CSceneNodeAnimatorCameraFPS an:

Code:
void CSceneNodeAnimatorCameraFPS::animateNode(ISceneNode* node, u32 timeMs)
{

   ...

   if (firstUpdate)
   {
      camera->updateAbsolutePosition();
      if (CursorControl && camera)
      {
         CursorControl->setPosition(0.5f, 0.5f);
         CursorPos = CenterCursor = CursorControl->getRelativePosition();
      }

      LastAnimationTime = timeMs;

      firstUpdate = false;
   }

   ...

   // get time
   f32 timeDiff = (f32) ( timeMs - LastAnimationTime );
   LastAnimationTime = timeMs;
   
...

   if (CursorKeys[EKA_MOVE_FORWARD])
      pos += movedir * timeDiff * MoveSpeed;
   ...
}


Da wird einfach immer die aktuelle Zeit gespeichert und dann im nächsten Funktionsaufruf mit der neuen Zeit verglichen. Danach wird die alte Zeit mit der neuen Zeit überschrieben etc.

Ich hoffe, das gibt dir ne Idee für nen Ansatz... :)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Selbstgeschriebener Animator?
BeitragVerfasst: 24.08.2009, 21:55 
Offline

Registriert: 05.09.2007, 15:01
Beiträge: 103
Ah perfekt, die Sache mit "firstAnimate" hat mir sehr gut geholfen, es funktioniert jetzt einwandfrei, danke.

_________________
Bild


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de