Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 29, 2025 15:51

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 14:48 
Offline
DGL Member

Registriert: Fr Jan 10, 2003 20:18
Beiträge: 88
Hi

Ich hab eine file mit mehreren position einer Camera abgespeicher

x,y,z = Koordinanten

rx,ry =Blick links-recht und oben unten
diese lade ich dann in eine arry und nun muss ich ja berechnen wie die bewegung am besten verlaufen soll

Kennt jemand ne Lösung oder ein gutes Tutorial.
Meine Cam soll über ein Landscape sanf und locker rum fliegen.Wie in Demos, wie man sie von Nehe kennt.

Danke im Vorraus

Eshat Cakar aka Shadow


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 14:59 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Hallo!

Also eine Möglichkeit wären Bezier-Kurven, zu denen es hier auch ein gutes Tutorial gibt, oder aber, was wohl deinen Bedürfnissen noch mehr entsprechen könnte: Spline-Funktionen. Das hatten welche bei mir im Mathe-LK als Facharbeitsthema (wenn da auch 2dimensional), aber umgesetzt habe ich das noch nicht. Wollte ich demnächst mal machen, und auch gucken, ob und wie gut das überhaupt für 3d geht.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 16:32 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Das ist jetzt wirklich etwas kompliziert, das in wenigen Worten zu erklären (und das Evaluator-Tutorial hier wird dir für dieses Problem auch nicht viel weiter helfen - da wird nur gezeigt, wie man OpenGL Evaluatoren zeichnet).

Du brauchst zwei Sachen:
- eine Routine, die als Eingabe deine Punkte als Kontrollpunkte einer glatten Kurve nimmt, da gibts übrigens auch wieder viele Möglichkeiten - die Einfachste ist, die Kurve durch Kreissegmente durch die Punkte darzustellen, wobei die Tangente der Segmente an den Kontrollpunkten gleichgerichtet sein sollte. Weil das aber nicht so toll aussieht - ist zwar glatt, aber irgendwie viel zu bauchig, verwendet OpenGL z.B. Bernstein-Polynome für die Kurvendarstellung, die viel schöner sind.

Hier findest du einen Artikel darüber, mit dem ich, zusammen mit den Informationen im Red-Book, einen 2D-Evaluator-Algorithmus umgesetzt habe:
<a href='http://www.uni-paderborn.de/fachbereich/AG/agdomik/computergrafik/cg_skript/html/node78.htm' target='_blank'>http://www.uni-paderborn.de/fachbereich/AG...html/node78.htm</a>

Wenn du jetzt glaubst, dass es nicht mehr schlimmer kommen kann - dann hast du dich getäuscht. Denn jetzt kannst du zwar jede beliebige Position auf der Kurve berechnen, hast aber keine Ahnung, wie die Kamera denn nun ausgerichtet sein soll. Hier müsstest du nun die erste Ableitung deines errechneten Polynoms nehmen - und die Tangente wäre dann die zu jedem Punkt gehörende Blickrichtung. Der Einfachheit halber, nimmst du aber einfach einen Punkt der etwas "vor" deiner aktuellen Position liegt - und am Differenzvektor richtest du dann die Kamera aus.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 16:59 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Zitat:
Das ist jetzt wirklich etwas kompliziert, das in wenigen Worten zu erklären (und das Evaluator-Tutorial hier wird dir für dieses Problem auch nicht viel weiter helfen - da wird nur gezeigt, wie man OpenGL Evaluatoren zeichnet).

Unsinn... Die OpenGl Evaluators werden nur am Ende beschrieben, wie man Patches selber berechnet wird lang und breit erklärt, alle nötigen Formeln liegen auch bei...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 17:27 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Delphic hat geschrieben:
Unsinn... Die OpenGl Evaluators werden nur am Ende beschrieben, wie man Patches selber berechnet wird lang und breit erklärt, alle nötigen Formeln liegen auch bei...

Es wird aber nur beschrieben wie es mit 4 Punkten geht... alles was darüber hinaus geht nicht ;)
(Ok, afaik geht mit EvaluatorKurven sowieso nich mehr als 4 Punkte.. da bräuchte man wohl dann Splines :) )

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 17:40 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Nenene...ihr übertreibt mal wieder alle maßlos ;)

Ich glaube für den Anfang reicht es bereits, wenn er zwischen den Kamerapositionen und Blickrichtungen einfach linear interpoliert und dabei die Rendergeschwindigkeit berücksichtigt (Time-Based-Movement).

Denn wenn die Kamera sich nur auf einer Geraden zwischen zwei Punkten bewegt und während dieser Bewegung ihren Blickwinkel um x-Grad verändert (die Anzahl der Achsen spielt ja dabei keine Rolle), reicht es doch wenn er die Kamera zeitbasierend pro Frame um x/y/z-Einheiten auf den neuen Punkt zu bewegt.

Ich habs zwar selbst noch nicht probiert, allerdings müsste es doch ganz einfach gehen.Wenn die Kamera z.B. bei 0/0/0 startet und sich auf einer Geraden nach 50/100/50 hin bewegen soll, sollte die Sache mit der zeitabhängigen Bewegung einwandfrei (und bei entsprechender Framerate auch flüssig) ablaufen.Einfach nen Referenzwert für die Kamerabewegung bzw -rotation per Frame festlegen (z.B. bei einer Bewegung von 100 Einheiten auf der X-Achse von Punkt1 zu Punkt2, würde sich die Kamera bei 100fps 0.1 Einheiten pro Frame auf dieser Achse bewegen) und dann den aktuellen Bewegungsfaktor anhand der zum Rendern benötigten Zeit berechnen. so dass sich die Kamera auch gleichmäßig (und damit flüssig) bewegt.

Schau dir dazu mal mein zweites Bombermantutorial an, denn dort schneide ich das Thema Time-Based-Movement kurz an.Dies dann von der Spielerbewegung auf die Kamerabewegung zu übertragen sollte eigentlich kein Problem darstellen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

@SoS: Klar.. so kann man es für 2 Punkte problemlos machen.. aber wenn da nun 10 Punkte sind... Kamera fliegt von A -> B -> C -> D -> ....

Dann wird das ein ziemlich eckiger flug wenn es linear läuft ;)

Au'revoir,
Aya~

PS: Oder ich hab Shadow falsch verstanden :unsure:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 18:12 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Zitat:
Es wird aber nur beschrieben wie es mit 4 Punkten geht... alles was darüber hinaus geht nicht

Ich meine da steht die Formel für Bezierkurven beliebigen Gerades. Jedenfalls hab ich nur die Formeln aus dem Tut verwendet, aber ich habe glaube ich auch noch keine Kurven mit mehr als 4 Punkten erstellt. Aber ich meine es müsste problemlos gehen.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 18:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Thunderman hat geschrieben:
[...]aber ich habe glaube ich auch noch keine Kurven mit mehr als 4 Punkten erstellt. Aber ich meine es müsste problemlos gehen.

Schau mal nach, und wenn ja... dann schick mir das mal bitte an Aya@Koshigaya.de *schaut lieb*

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 19:09 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
Steht definitiv im Tut:
Zitat:
Es gibt eine einfache Formel für die Basis Funktionen von Bezier Kurven für einen beliebigen Grad. n ist der Grad, i beziffert die Basis Funktion und reicht damit von 0 bis n: Bild
Musst halt nur dann in Code umsetzen die Formel, was aber überhaupt keine Probleme bereiten dürfte. Und wenn ich mich recht entsinne hast doch gerade du damals mit DelphiC oder so darüber unterhalten hier im Forum...

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 19:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

mhh.... also für mich isses im moment noch nen Problem *g* (Hab das tutorial eben nochmal gelesen)
Also nich das in Code umzusetzen oder so, sondern überhaupt..

1) Ich habe z.B. 10 Punkte.. wo geb ich bei der Formel da die 10 Punkte an? :unsure:
2) Ich errechne mit dieser formel doch ein B.. oder??? Aber ein B is ein B, und kein X, Y, Z... *g*

*guckt hilfesuchend*

und die sache mit glMap hat bei mir immer nur mit max. 4 Punkten funktioniert...

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 24, 2003 19:33 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Okt 26, 2002 17:14
Beiträge: 188
Wohnort: Hannover/Lüneburg
B ist ja auch nicht ein Punkt sondern der Faktor für deine Kontrollpunkte, um den entgültigen Punkt zum Moment t auszurechen.
Das ganze hat dir DelphiC damals hier erklärt: <a href='http://www.phobeus.de/hosting/dgl/forum/index.php?act=ST&f=3&t=594' target='_blank'>http://www.phobeus.de/hosting/dgl/forum/in...ct=ST&f=3&t=594</a>
glMap() ist ja auch was anderes als ne reine Bezierkurve. Für die Kamerafaahrt brauchst du sowas wie glMap() ja auch nicht. Die Bezierkurve ansich geht aber für beliebig viele Punkte.

_________________
Thunderman
Bei schwierigen Problemen entscheiden wir uns einfach für die richtige Lösung. Klar?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 25, 2003 09:12 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Zitat:
Unsinn... Die OpenGl Evaluators werden nur am Ende beschrieben, wie man Patches selber berechnet wird lang und breit erklärt, alle nötigen Formeln liegen auch bei...


Stimmt, die Formeln wären dagewesen - ich muss zu meiner Schande gestehen, dass ich das Tutorial nur vor einigen Monaten mal überflogen habe, und mir nur noch der OpenGL Code in Erinnerung geblieben ist (irgendwie kommt mir vor, dass in sämtlichen Erklärungen zu NURBs, die ich bis jetzt gelesen habe, das selbe Demopatch verwendet wurde :D ).
Allerdings nimmt es einem auch das Tutorial nicht ab, die Bernsteinpolynome in Code umzusetzen (was ja weiter nicht tragisch ist, die Info wäre ja da).


Wenn ich mir die Beiträge hier so ansehe, wäre auch eine Erläuterung, wie man mehrere Bezierkurven (oder Patches) niedrigen Grades zusammenhängt, sodass sie eine kontinuierlich gekrümmte Kurve / Hügellandschaft ergeben nicht ganz umsonst.
Es ist nämlich KEINE gute Idee eine komplexe Kurve aus einem Polynom hohen Grades zu berechnen - erstens steigt der Rechenaufwand exponentiell an (siehe Formel), die Kurve wird chaotisch (schlecht vorhersagbar, wie sich die Kontrollpunkte tatsächlich auswirken) - und wenn man sie dann darstellen will, unterstützt OpenGL (aus eben diesen Gründen) nur eine sehr begrenzte Anzahl von Kontrollpunkten

Ich erklär mal kurz, wie es geht - evtl. kann man es noch ins Tutorial einfügen:
Ich nehme als Beispiel einen Polynom 2. Grades, entspricht also der Darstellung eines Liniensegmentes als Kurve mit drei Kontrollpunkten.
Ziel ist, mehrere solcher Segmente zu einer zusammenhängenden Kurve zusammenzukleben.

Lösung:
Nehmen wir an, die Kontrollpunkte sind folgendermaßen angeordnet, da die Segmente zusammenhängen sollen, brauche ich nur fünf Punkte, da sich die beiden Segmente C teilen
A B C D E

Nun haben wir zwei über Kontrollpunkte definierte Segmente (A B C) und (C D E), wobei nur die Kontrollpunkte A C E tatsächlich auf der Kurve liegen, B D werden nur angenähert, über sie wird die Krümmung der Kurve definiert.
Um nun dafür zu sorgen, dass die Kurve in C keinen Knick bekommt, muss dafür gesorgt werden, dass beide Segmente in C die selbe Tangente haben - dies geschieht einfach, indem dafür gesorgt wird, dass C auf der durch B und D definierten Gerade liegt.

Dieses Beispiel lässt sich nun auf beliebig viele Kontrollpunkte erweitern, frei wählbar sind dann aber nur die Hälfte, da die andere Hälfte automatisch berechnet werden muss, um eine zusammenhängende Kurve zu erhalten. Probierts einfach mal aus.

@Aya
Ich hoffe, das hilft dir weiter

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 26, 2003 16:06 
Offline
DGL Member

Registriert: Fr Jan 10, 2003 20:18
Beiträge: 88
OK ich bedanke mich für die vielen Antworten aber so richtig geholfen hat mir auch nix.
ich hab die Cam zwar hinbekkomen aber läuft diese nur linear und dies siehtabsolout nicht toll aus.

Wie ich es mit den Bezier Curves hinkriege hab ich keine Ahnung da alles zu durcheinander war(die Beiträge in dieses Topic)

Hat keiner einen Beispiel Code den er mir schickjen kann. Alle Sourcxes bitte an Eshat@gmx.net


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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
[ Time : 0.017s | 17 Queries | GZIP : On ]