Kamera bewegen vs. Welt bewegen



  • Hi Leute...
    Mich interessiert mal, ob es besser ist (bei einem Spiel meinetwegen) die Kamera, also den Betrachter oder die gesamte Welt zu bewegen und zu rotieren?
    Wie macht ihr das und wie sollte man es machen?
    Vor- und Nachteile von beiden Moeglichkeiten??
    Danke fuer alle Antworten im voraus.
    MfG Aoeke



  • Ich dachte immer, da wäre kein Unterschied (zumindest in 3D)?
    Belehrt mich, wenn dem nicht so ist.
    geloescht



  • Hi,

    die ganze 3D-Welt zu drehen ist zwar erheblich einfacher(also erfordert viel weniger und unkomplizierteren Code) als eine extra Kamera ein zu richten, aber die zweite Methode ist bei großen Welten aufgrund der Geschwindigkeit der ersten vorzuziehen.

    Gruß #######



  • geloescht schrieb:

    Ich dachte immer, da wäre kein Unterschied (zumindest in 3D)?

    Fuer den Betrachter ist es kein wirklicher Unterschied. Fuer den Programmierer aber schon.. 😉
    Stell dir vor, der Benutzer bewegt die Maus so, dass sich der Betrachter um 40 Grad nach links dreht.
    Jetzt hat der Programmierer folgende Moeglichkeiten:
    1. Er rotiert die Kamera um 40 Grad nach links.
    2. Er rotiert die ganze Welt um 40 Grad nach rechts.
    Das Ergebnis muesste trotzdem gleich aussehen...
    Was gibt es sonst noch fuer Vor- und Nachteile?
    MfG Aoeke

    PS: Meine Frage ist natuerlich auf 3D bezogen, aber das habt ihr ja schon mitbekommen... 😉



  • Wo ist denn da der Unterschied?
    Gibts etwa die Funktionen "Beweg die Kamera" und "Beweg die Welt"? Wenn deine API oder was auch immer beide Funktionen zur verfügung stellt, dann machen sie vermutlich intern das gleiche.
    Wenn du mit "die gesamte Welt bewegen" meinst dass du jedes Objekt "manuel" bewegst, dann lohnt sich das vieleicht in einer simpelen 2D-Welt. Wenn du allerdings OpenGL oder DirectX benutzt, dann ist es denke ich aufjedenfall mal kein Nachteil und einfacher die Kamera zu bewegen.



  • DirectX / OpenGL haben die "Kamera" ja sowieso immer fest auf'm Nullpunkt liegen, beim einen schaut sie entlang der positiven, beim anderen entlang der negativen Z-Achse...



  • Ja, aber mithilfe des GL Utilities (GLU) kann man die Kameraposition, den Referenzpunkt und den UpVector veraendern. Heisst, damit kann man die Kamera bewegen. Jetzt wollte ich halt wissen, ob, und welche, Vor- bzw. Nachteile dabei entstehen, das so zu machen. 😉
    MfG Aoeke



  • Aoeke schrieb:

    Ja, aber mithilfe des GL Utilities (GLU) kann man die Kameraposition, den Referenzpunkt und den UpVector veraendern. Heisst, damit kann man die Kamera bewegen. Jetzt wollte ich halt wissen, ob, und welche, Vor- bzw. Nachteile dabei entstehen, das so zu machen. 😉
    MfG Aoeke

    Quatsch...



  • Warum willst du die Kamera bewegen? Bringt doch nichts. Ausser mehr Rechenarbeit beim Zurückstellen der übrigen Objekte in der 3D Welt.



  • Höööööööööööööö, wieso sollte man die Welt bewegen? Dafür ist doch die "Kamera" da, damit man mit ihr dort "hin guckt" wo der Benutzer es haben will. Ist doch das leichteste was es gibt 🙄



  • FireYourGuns schrieb:

    Höööööööööööööö, wieso sollte man die Welt bewegen? Dafür ist doch die "Kamera" da, damit man mit ihr dort "hin guckt" wo der Benutzer es haben will. Ist doch das leichteste was es gibt 🙄

    Schon mal Grafik Programmiert?



  • ChockoCookie schrieb:

    Schon mal Grafik Programmiert?

    Wie kann man denn Grafik programmieren?!? 😕 😉



  • Aoeke schrieb:

    Ja, aber mithilfe des GL Utilities (GLU) kann man die Kameraposition, den Referenzpunkt und den UpVector veraendern. Heisst, damit kann man die Kamera bewegen. Jetzt wollte ich halt wissen, ob, und welche, Vor- bzw. Nachteile dabei entstehen, das so zu machen. 😉
    MfG Aoeke

    Diese GLU-Funktionen haben den Ruf, viel zu langsam zu sein.
    Wenn du mit OGL programmierst (nur das kenne ich ein bisschen) dann benutze die Kamera - dafür ist sie ja da.



  • Ich meinte damit natürlich ein Programm zu schreiben, das 3D Grafik ausgibt. (immer diese Pingeligkeit 😉 )

    btw schau mal auf den Namen dieser Forensektion 🙄

    Und ich wollte damit sagen, das es wohl nicht so einfach geht der 3D API einfach so zu sagen: Ja richte die Kamera mal bitte dorthin, oder besser frag gleich die Maus wohin du sie richten sollst.

    [EDIT] Ja OK mit solchen Sachen wie gluLookAt() kann man sich selber schon eine Kamera vorgaukeln. Oder man kann auch eine Kamera Klasse schreiben. Aber letztendlich müssen diese Funktionen auch intern die Koordinaten transformieren, sprich die Welt bewegen. 😃 Aber das ist wohl Ansichtssache. So als ob das Glas halbvoll oder halbleer ist. Aber an solchen Diskussionen beteilige ich mich nicht. Ich hau lieber rechtzeitig ab, damit ich das Glas nicht wegräumen muss. 😃 [/EDIT]



  • ChockoCookie schrieb:

    Ich meinte damit natürlich ein Programm zu schreiben, das 3D Grafik ausgibt. (immer diese Pingeligkeit 😉 )

    btw schau mal auf den Namen dieser Forensektion 🙄

    Und ich wollte damit sagen, das es wohl nicht so einfach geht der 3D API einfach so zu sagen: Ja richte die Kamera mal bitte dorthin, oder besser frag gleich die Maus wohin du sie richten sollst.

    [EDIT] Ja OK mit solchen Sachen wie gluLookAt() kann man sich selber schon eine Kamera vorgaukeln. Oder man kann auch eine Kamera Klasse schreiben. Aber letztendlich müssen diese Funktionen auch intern die Koordinaten transformieren, sprich die Welt bewegen. 😃 Aber das ist wohl Ansichtssache. So als ob das Glas halbvoll oder halbleer ist. Aber an solchen Diskussionen beteilige ich mich nicht. Ich hau lieber rechtzeitig ab, damit ich das Glas nicht wegräumen muss. 😃 [/EDIT]

    Öhm, ja, also, ich wüßte jetzt nicht wo hier die Schwierigkeit liegen sollte 😕

    Um deine Frage weiter oben zu beantworten...ja, ich programmiere gerade eine Engine (hab also schonmal "Grafik" programmiert ;)) und finde die Kamerabewegung wirklich nicht schwer. Scrollen war in 15 Min. implementiert.



  • OK dann hab ich dich falsch eingeschätzt. Wie gesagt es ist eine Standpunktfrage und mein Standpunkt ist, das man die Welt bewegt, weil nach allen Transformationen die API die Koordinaten so bekommt, das der Betrachter im Nullpunkt sitzt. Soll heißen auch die Kamera muss die Vertices transformieren um die Welt in die richtige Richtung zu drehen. Und letztendlich dreht sich ja auch die Sonne um die Erde 😉
    Bin jetz ein bisschen OT sorry. Will damit nur sagen das es grundsätzlich keinen Unterschied macht ob man die Welt oder die Kamera bewegt, weil es letztendlich aufs selbe rauskommt (um auf Thema zurückzukommen). Selbstverständlich ist eine Kamera, die bewegt wird programmtechnisch besser zu handhaben.



  • Hmm, dass mit "Kamera immer auf den Nullpunkt" ist ein interessanter Aspekt! Müsste mal schauen ob das für mich Vorteile bringen würde, aber jedem dass seine 🙂



  • Versteh ich da was falsch?

    Das Blickfeld kann man doch einfach ohne Probleme so implementieren:

    D3DMATRIX view_matrix;
    D3DUtil_SetViewMatrix(view_matrix,
    		  D3DVECTOR(playerposx,playerposy,playerposz),
    		 _view_at,
    	         D3DVECTOR(0.0f,1.0f,0.0f));
    	         lpDevice->SetTransform(D3DTRANSFORMSTATE_VIEW,&view_matrix);
    

    Hab da noch ne Frage.
    Wie bekomme ich die Bewegung der Kamera flüssiger hin???
    Was gibt es da für Möglichkeiten?



  • Schnallt ihr es nicht? Es gibt ehh keinen absoluten Nullpunkt. Man kann also garnicht bestimmen, ob Kamera oder die Welt bewegt wurde. Das interessiert auch überhaupt nicht, da nur die relative Bewegung zählt.

    Bye, TGGC (Der Held ist zurück)



  • Schnallt Ihr es nicht?
    Die View-Matrix tut doch genau das, nämlich die Welt entgegengesetzt zu bewegen...


Anmelden zum Antworten