Aktuelle Zeit: 09.01.2025, 21:24

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Rotation und Bewegung
BeitragVerfasst: 09.05.2007, 09:30 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Hallo Leute,

ich hab jetzt schon mal ein kleines 3D Spiel (Pong3D), zum Ãœben mit der IrrlichtEngine auf C++ geschrieben.

Ich hab allerdings jetzt schon das Problem, wie ich später mal ein Objekt Rotieren lassen will und es dann in die rotierte Richtung bewegen soll?!

In der IrrlichtEngine muss man anscheinend die aktuelle Rotation und Bewegung immer in Variablen abspeichern. Aber wie kann ich denn ein Objekt drehen und dann in diese gedrehte Richtung bewegen?

Danke für eure Hilfe :)

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Rotation und Bewegung
BeitragVerfasst: 09.05.2007, 12:07 
Offline

Registriert: 23.04.2007, 20:02
Beiträge: 73
LukasBanana hat geschrieben:
Hallo Leute,
In der IrrlichtEngine muss man anscheinend die aktuelle Rotation und Bewegung immer in Variablen abspeichern.


Nö, es gibt ja getrotation().


LukasBanana hat geschrieben:
Aber wie kann ich denn ein Objekt drehen und dann in diese gedrehte Richtung bewegen?


updateAbsolutePosition() vorher ausführen

(Steht alles in der .chm Hilfe!)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 12:13 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
Also die Aktuelle rotation eines objektes (nodes) wird im node gespeichert
Code:
scene::ISceneNode *node;
node->rotation=core::vector3df(x,y,z);

die bewegungsrichtung weis ich nicht genau^^


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 13:08 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
nodes haben keine bewegungsrichtung, nur der (zb) flyStraightAnimator der den node bewegt.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 13:44 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Mit den entsprechenden trigonometrischen Funktionen kann man aber eine Funktion schreiben, die diese relative Bewegung korrekt ausfüht.

Lightfeather kann das.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 14:49 
Offline
Moderator

Registriert: 26.03.2007, 20:06
Beiträge: 114
Na da macht wohl jemand Schleichwerbung für gewisse Forks? :lol:


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 15:53 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Also dass ich die Variablen X, Y, Z usw. nicht selber abspeichern muss weiß ich jetzt.
Aber wie genau kann ich eine Funktion schreiben mit ich die Bewegung in eine bestimmte Richtung machen kann?

So sieht meine aus: (funktioniert aber nicht so wie ich will) :(

Code:
void MoveSceneNode(scene::ISceneNode* node, const core::vector3df &newpos) {
    core::vector3df pos = hEntity->getPosition();
    node->updateAbsolutePosition();
    node->setRotation(hEntity->getRotation());
    node->setPosition(core::vector3df(pos.X+newpos.X, pos.Y+newpos.Y, pos.Z+newpos.Z));
}

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 17:14 
Offline
Moderator
Benutzeravatar

Registriert: 11.03.2007, 20:25
Beiträge: 556
Wohnort: Frankfurt/Main
benutz doch den flystraightanimator.
node in die richtung drehen, animator in die richtung hinzufügen.


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 18:20 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Sry, OT ^^:
Zitat:
Na da macht wohl jemand Schleichwerbung für gewisse Forks?

Joa, benutze LF jetzt schon seit einiger Zeit, weil einfach die Entwicklung schneller vorangeht als bei Irrlicht :p
zB Terrain oder diese SceneNode-Funktionen (mit denen niko keine probleme beim implementieren hätte)...
Ãœbrigends ist LF nicht mehr IrrlichtNX, wurde zu 99% neu geschrieben (bis auf core:: )
Die Nachteile sind halt die winzige Community und die schlechten Docs.

LukasBanana:
Für direkte Bewegung in eine Richtung brauchst du sin() und cos(), um das über Dreiecke auszurechnen.
Ich kann gleich mal gucken, ob ich da schnell was zusammengekleistert bekomme.

EDIT:
Auszug aus LF, CSpacial.cpp:
Code:
      //! move forward taking local rotation into account
      //! \param stepSize: how much to move
      void CSpacial::moveForward(f32 stepSize)
      {
         core::vector3df move = localRotation * core::vector3df(0.0f,0.0f,1.0f);
         setPosition(localPosition + (move * stepSize));
         transformationChanged = true;
         transformationNotify();
      }


      //! move backward taking local rotation into account
      //! \param stepSize: how much to move
      void CSpacial::moveBackward(f32 stepSize)
      {
         core::vector3df move = localRotation * core::vector3df(0.0f,0.0f,1.0f);
         setPosition(localPosition + (move * -stepSize));
         transformationChanged = true;
         transformationNotify();
      }


      //! move left taking local rotation into account
      //! \param stepSize: how much to move
      void CSpacial::moveLeft(f32 stepSize)
      {
         core::vector3df move = localRotation * core::vector3df(1.0f,0.0f,0.0f);
         setPosition(localPosition + (move * -stepSize));
         transformationChanged = true;
         transformationNotify();
      }


      //! move right taking local rotation into account
      //! \param stepSize: how much to move
      void CSpacial::moveRight(f32 stepSize)
      {
         core::vector3df move = localRotation * core::vector3df(1.0f,0.0f,0.0f);
         setPosition(localPosition + (move * stepSize));
         transformationChanged = true;
         transformationNotify();
      }

      //! move up taking local rotation into account
      //! \param stepSize: how much to move
      void CSpacial::moveUp(f32 stepSize)
      {
         core::vector3df move = localRotation * core::vector3df(0.0f,1.0f,0.0f);
         setPosition(localPosition + (move * stepSize));
         transformationChanged = true;
         transformationNotify();
      }


      //! move down taking local rotation into account
      //! \param stepSize: how much to move
      void CSpacial::moveDown(f32 stepSize)
      {
         core::vector3df move = localRotation * core::vector3df(0.0f,1.0f,0.0f);
         setPosition(localPosition + (move * -stepSize));
         transformationChanged = true;
         transformationNotify();
      }



Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 18:38 
Offline

Registriert: 08.04.2007, 16:55
Beiträge: 115
leute, ihr habt alle nen schuß weg! (nicht ernst gemeint)
Ihr macht euch viel zu viel mühe!! und Sin/Cos ist sowiso blödsinn, viel zu langsam!! Das macht die engin schon für euch!! Werf mal nen blick au den Inhalt der Objekt Matrixen!! Alles was es zu tun ibt, um das Objekt entlang seiner Lokalen X achse zu bewegen ist den vector (1,0,0) //1 ist die geschwindigkeit, hier könnte auch 3 stehen oder what ever...
mit der getAbsoluteTransform matrix rotieren!!
Code:
vector3df speed(1.325,0,0);
node->getAbsoluteTransformation().rotateVect(speed);
node->setPosition(node->getPosition+speed);
//nicht kompeliert, also guck, ob alle Funktionen richtig geschrieben sind!

greetz TGM


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 09.05.2007, 18:55 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
So ziemlich das macht der Code doch, den ich gepostet habe... o.O


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 10.05.2007, 10:28 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Ich werd' das mal ausprobieren, und vielen Danke schon mal an alle :D

Aber wo wir schon bei der Rotation sind:
Um die Camera zu rotieren muss ich leider immer den Punkt angeben an den die Camera gucken soll (look at).
Das hat natürlich auch Vorteile aber erst mal will ich diese Camera selber drehen.

Wie kann ich denn dass machen?

_________________
Meine Homepage: http://www.hlc-games.de/
Mein Projekt: http://softpixelengine.sourceforge.net/
Mein Forum: http://www.hlc-games.de/forum/


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de