Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » First Person - In 3 Dimensionen bewegen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.07.2006, 18:00 Uhr
~isas
Gast


Hallo!

Ich arbeite mich gerade in OpenGL ein. Geht auch recht gut, aber stehe nun vor einem Problem, dass eher allgemein ist. Will mich wie bei einem 3D Programm frei in der Welt bewegen können. Wie ein Raumschiff: Rauf, runter, links, rechts, drehenrauf, drehenrunter, drehenlinks, drehenrechts. Sprich vogelfrei. Ich glaube, ihr wisst, was ich meine Wink

Auf 2 Dimensionen hab ich es auch schon geschafft mich zu bewegen, aber irgendwie happerts an der 3...

Ich habe 2 Winkel (eine um die z-Achse und die andre um die y-Achse) und eine Weglänge (oder auch radius). Jetzt möchte ich, wenn ich mich in einem bestimmen Winkel (sagen wir mal 45° von x weg und 45° hinauf) den Punkt errechnen, der vom 0Punkt genau diese Winkel entfernt ist mit einer bestimmten Weglänge.

Kurz gesagt, ich schaue gerade rechts rauf und will mit betätigen einer Taste auch dorthin.
Ich brauch also die Formel(n), die man benötigt, um diesen Punkt zu berrechnen.

Danke

PS: Falls ich mich schlecht ausgedrückt habe und ihr nicht wisst, was ich will, dann versuche ich es irgendwie anders nochmal. Aber Stichwort vogelfrei bzw Kammera wie in einem 3D Bearbeitungs-Programm müsste eigentlich alles erklären!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.07.2006, 20:15 Uhr
BoBtheREapER
kein job für nen BoB


ich will pablo zwar nicht die arbeit abnehmen aber gehört dass nicht eigentlich in das opengl forum?
und ich kann mit dem vogelfrei gar nichts anfangen ich weiß wohl was ne vogel pespektive ist.
--
"Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein
www.blue-xenon.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.07.2006, 20:38 Uhr
Pablo
Supertux
(Operator)



Zitat von BoBtheREapER:
ich will pablo zwar nicht die arbeit abnehmen aber gehört dass nicht eigentlich in das opengl forum?



ja -->
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.07.2006, 21:06 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


denke er meint mit "vogelfrei" ne freidrehbare Kamera.

das wird normal so realisiert, das man eine Art "korridor" berechnet, welche der benutzer überhaupt sieht (den rest muss man ja nicht rendern) und ansonsten bei einer bewegung die szene in die gegenrichtung dreht, womit sich dann für den benutzer "die kamera" dreht.

Testweise kann mans auch erstmal so machen, das man einfach die komplette 3D-Geschichte zeichnet, und dann eben die kamera an die richtige stelle hinschiebt und dreht.

In den NEHE-GL-Tutorials ist das alles ganz gut beschrieben (bis auf das mit dem "Korridor")
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.07.2006, 11:02 Uhr
Drager



meinst du zufällig:

x = r * sin(phi) * cos(eps)
y = r * sin(phi) * sin(eps)
z = r * cos(phi)

mit 0 <= phi <= pi; 0 <= eps < 2pi


für firstperson sollte das wunderbar funktionieren, da du ja hier im mittelpunkt deines bezugsystems stehst... bei thirdperson, würd ich mal einen blick in "quaternions" werfen, da sonst unerwartete rotationen rauskommen... (man erwartet ja das sich das bezugssystem immer mit dem raumschiff dreht, was es bei achsenrotation natürlich nicht macht..)

Dieser Post wurde am 31.07.2006 um 11:03 Uhr von Drager editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.07.2006, 12:21 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


http://de.wikipedia.org/wiki/Vogelfrei :P
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.07.2006, 15:29 Uhr
~isas
Gast


Naja, openGL hin oder her
Es ist nicht speziell, da es eigentlich rein mathematisch ist. Es hat zwar mit opengl zu tun, aber ist doch eher ein allgemeines Problem... Aber egal.

@FloSoft: Wie das gerendert wird, ist derweiln nicht wichtig. Es geht nur mal um ne, wie du sehr gut gesagt hast, frei drehbare Kamera. (Hmm, dachte, Opengl Rendert automatisch nur das, was man sieht... alles andere wird einfach nicht gerendert. Aber egal, das is auch nicht so wichtig.) Schau mir mal das von NeHe an...

@Drager: Ja, aber das bekomm ich irgendwie nicht hin:

habe die Winkel auf der xz-Achse und xy achse.

hmm, Also eigentlich hab ich beide Winkel, die ich brauche... richtig?

Nehmen wir an:
Winkel auf der xy-Achse = a = 45°
Winkel auf der xz-Achse = b = 45°
Radius r = 1 und somit nich zu beachten.

x = sin(a) * sin(b) = 0.5 //falsch. Müsste 0.577 sein.

@Guybrush Threepwood: hehe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.07.2006, 16:14 Uhr
Drager



hm ok, das geht so mit achsenrotation natürlich nicht.

weil du kannst nicht einfach sagen, 45° um die y achse, und dann 45° x achse und dann erwarten, dass du dann oben rechts bist :-), da sich deine x-achse ja bei der ersten rotation nicht verändert hat... derweil achsenrotation ja auch reihenfolge abhängig ist..
(quaternions nicht, da sich deine bezugssystem sprich deine achsen bei jeder rotation mitdrehen.)

dann musst du zu quaternions greifen. am besten einfach mal googlen, für die gibts spezielle rechenregeln, die einfach alle implementieren.

dann einfach alle rotationen mithilfe der quaternions zu einer rotation zusammenfassen, diese kannst du dann ganz normal mit achsenrotation durchführen...

von hier einfach mal die regeln für "+" und "*" abschreiben, mehr brauchst net:

http://trevinca.ei.uvigo.es/~formella/doc/ig04/node97.html

hier mal kurz ein beispiel:


C++:
Quaternion q1;
q1.MakeQuaternion(anglenew,Vec3f(1.0f,0.0f,0.0f)); //new rotation
Quaternion q2;
q2.MakeQuaternion(angle,Vec3f(0.0f,1.0f,0.0f)); //actual rotation
        
q1 = q1 * q2; //put em together to one rotation



danach steht in q1, der winkel und die achse, für beide rotationen zusammengefasst.
diese dann einfach mit normaler achsenrotation drehen..

Dieser Post wurde am 31.07.2006 um 16:21 Uhr von Drager editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: