Aktuelle Zeit: 09.01.2025, 16:54

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Bewegung der Kamera
BeitragVerfasst: 16.06.2007, 13:23 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Hi, ich habe diese Frage schon mal gestellt aber leider antwortet keiner desshalb hoffe ich mit einem neuen Thread endlich ein Antwort zu erhalten:

Ich habe jetzt mal eine Funktion geschrieben mit der man die Camera an einem Parent (Der Fuß der Spielfigur) Bewegen kann:

Code:
scene::ISceneNode* cam_lookat[MAX_CAMS];

void RotateCamera(int nr, scene::ICameraSceneNode* cam, float pitch, float yaw, scene::ISceneNode* parent) {
    core::vector3df parentpos(0, 0, 0);
    if (parent)
        parentpos = parent->getPosition();
       
    if (!cam_lookat[nr])
        cam_lookat[nr] = smgr->addCubeSceneNode(0);
    if (cam_lookat[nr]) {
        cam_lookat[nr]->setPosition(cam->getPosition()+parentpos);
        cam_lookat[nr]->setRotation(core::vector3df(pitch, yaw, 0));
        MoveSceneNode(cam_lookat[nr], core::vector3df(0, 0, 10));
        cam->setTarget(cam_lookat[nr]->getPosition());
    }
}

Ich habe aber leider das Problem, dass wenn ich mich nun nach rechts oder links bewege, dass ich immer etwas zu weit in diese Richtung rotiere.
Und um so weiter ich nach unten gucke desto höher wird die deutlich abweichende Drehung

Kann mir jemand sagen was ich falsch mache?

_________________
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: Bewegung der Kamera
BeitragVerfasst: 18.06.2007, 07:28 
Offline

Registriert: 15.06.2007, 14:47
Beiträge: 6
Klingt ein wenig so, als würdest Du Rotation und Translation vertauschen. Ich weiß zwar nicht genau, wie das in Irrlicht geregelt ist, aber es gibt einen Unterschied zwischen

"Erst verschieben, dann drehen"

und

"Erst drehen, dann verschieben".

Das liegt daran, dass im ersten Fall der Punkt, um den Du drehst, nicht mehr im Ursprung des Objektes (bzw. der Kamera) liegt. Also im Zweifel mal

Code:
scene::ISceneNode* cam_lookat[MAX_CAMS];

void RotateCamera(int nr, scene::ICameraSceneNode* cam, float pitch, float yaw, scene::ISceneNode* parent) {
    core::vector3df parentpos(0, 0, 0);
    if (parent)
        parentpos = parent->getPosition();
       
    if (!cam_lookat[nr])
        cam_lookat[nr] = smgr->addCubeSceneNode(0);
    if (cam_lookat[nr]) {
        cam_lookat[nr]->setRotation(core::vector3df(pitch, yaw, 0));
        cam_lookat[nr]->setPosition(cam->getPosition()+parentpos);
        MoveSceneNode(cam_lookat[nr], core::vector3df(0, 0, 10));
        cam->setTarget(cam_lookat[nr]->getPosition());
    }
}


probieren.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Bewegung der Kamera
BeitragVerfasst: 18.06.2007, 12:48 
Offline
Moderator

Registriert: 26.03.2007, 20:06
Beiträge: 114
Ich steige zwar grad nicht ganz durch deinen Code durch, da ich grad wenig Zeit habe, aber durch das Irrlicht-"Feature" das erst alles einen Frame später rotiert wird, solltest du, wenn du die Rotation von einem Parent überträgst erst beim Parent "updateAbsolutePosition" aufrufen. Damit stellst du sicher, das du beim abfragen der Rotation die richtigen Werte bekommst!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Bewegung der Kamera
BeitragVerfasst: 19.06.2007, 12:34 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Also wenn ich Rotation und Position vertausche tut sich leider auch nichts.
Du hast schon Recht, normalerweise ist der Unterschied wichtig aber hier anscheinend nicht.

Das mit updateAbsolutePosition() hab ich noch nicht so ganz verstanden.

Falls es hilft, hier meine eigene MoveSceneNode Funktion:
Code:
void MoveSceneNode(scene::ISceneNode* node, core::vector3df speed) {
    node->getAbsoluteTransformation().rotateVect(speed);
    node->setPosition(node->getPosition()+speed);
}

_________________
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: Bewegung der Kamera
BeitragVerfasst: 19.06.2007, 16:32 
Offline
Moderator

Registriert: 26.03.2007, 20:06
Beiträge: 114
Schreib einfach mal vor das
Code:
node->getAbsolutePosition.blah

ein
Code:
node->updateAbsolutePosition()
.

Vll bringt ja was. Ich hab damit beim übernehmen der Camera Rotation auf ein Modell das Problem gelöst, das das Modell immer erst eienn Frame später verschoben wurde. Probiers einfach mal aus...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Bewegung der Kamera
BeitragVerfasst: 19.06.2007, 16:45 
Offline

Registriert: 15.06.2007, 14:47
Beiträge: 6
LukasBanana hat geschrieben:
Also wenn ich Rotation und Position vertausche tut sich leider auch nichts.
Du hast schon Recht, normalerweise ist der Unterschied wichtig aber hier anscheinend nicht.


Ich denke schon, dass das mit Deinem Problem zu tun hat. Entscheidend ist dabei aber, wann und wie die Matrix-Transformation ausgeführt wird.

LukasBanana hat geschrieben:
Das mit updateAbsolutePosition() hab ich noch nicht so ganz verstanden.


So wie ich jetzt spontan vermuten würde, tut dies gerade diese Funktion.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Bewegung der Kamera
BeitragVerfasst: 20.06.2007, 19:51 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Also,
jetzt weiß ich wo das Problem möglicher Weise liegen könnte:
meines Wissens kann man die Camera immer nur auf einen Punkt konzentrieren, man kann sie aber nicht direkt rotieren, also habe ich eine Funktion geschrieben die dies erledigt in dem sie ein unwichtiges Objekt erstellt, auf KameraPosition stellt, rotiert, noch etwas nach vorne schiebt und dann die Camera drauf gucken lässt.
Das ist sehr umständlich aber über die IrrlichtEngine hatte ich bis her keine bessere Lösung.
Ich wäre sehr dankebar wenn es eine bessere gäbe und sie mir jemand sagen könnte.

Das mit updateAbsolutePosition() habe ich schon verstanden, aber vielleicht ist ja das oben genannte das Problem?!

Gruß LukasBanana

_________________
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: Bewegung der Kamera
BeitragVerfasst: 21.06.2007, 12:56 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
Im Grunde hast du Recht: Ein Target-Point ist bei Irrlicht leider zwingend (Warum weiß ich auch nicht). So musst du immer sowohl die Kamera also auch den Target-Point (also der Punkt, wo die Kamera drauf guckt) verschieben. Der Target-Point muss aber kein Objekt sein: Mit der Methode setTarget kannst du den TargetPoint bestimmen, indem du einfach eine vector3df-Variable übergibst.
Dadurch kannst du dir das mit dem Objekt sparen ;)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Bewegung der Kamera
BeitragVerfasst: 21.06.2007, 17:31 
Offline
Benutzeravatar

Registriert: 21.04.2007, 20:54
Beiträge: 117
Ja, das schon, aber dann müsste ich die Berechnunger der Rotation selber machen.
Warum ich mich beim Bewegen immer noch zu weit drehe weiß ich immer noch nicht :(
Ich habe wirklich momentan keine Ahnung was ich falsch mache?! Ich meine, irgend jemand von euch muss doch 3D Spiele programmieren und wissen wie man das macht wenn sich die SpielFigure (Kamera) dreht und bewegt?!

_________________
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  [ 9 Beiträge ] 

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