da ich am aktuellen Projekt nur in der orthogonalen Ansicht arbeite und ständig Koordinaten vom Windows-System in das System von OpenGL umwandeln muss, habe ich mir ein kleines Programm geschrieben, welches mir diese Arbeit abnimmt.
Die Experten werden denken: "Warum auf die Art?"
Richtig, man kann auch eine geeignete Subroutine in der eigenen Anwendung verarbeiten lassen, aber ich habe aus Gründen der Übersichtlichkeit und der fehlenden Notwendigkeit, die Positionen meiner Graphiken dynamisch zu halten, einfach mit meinem Tool die OpenGL Koordinaten ausgerechnet und als konstante Werte in meiner Render-Routine angegeben.
Wer also im orthogonalen System arbeitet und nicht eine eigene Funktion zwecks Umrechnung will/hat/braucht, der kann sich mit diesem Tool diese Arbeit ersparen.
Registriert: Do Mär 06, 2003 15:27 Beiträge: 281 Wohnort: Bochum
mangels passendem thread unter "meinungen", schreibe ich meine frage hier:
"die Positionen meiner Graphiken dynamisch zu halten, einfach mit meinem Tool die OpenGL Koordinaten ausgerechnet und als konstante Werte in meiner Render-Routine angegeben. "
-> ist das nicht n ziemlicher widerspruch ? du willst deine grafiken dynamisch "halten", ich interpretiere das mal so, dass die grafiken
-dynamisch auf dem bildschirm bewegt werden, oder
-dynamisch abhängig von der fenster größe bzw. der desktop-ausmaße des anwenders angepasst werden,
was beides alles andere als "konstante werte in der render-routine" vorraussetzt!
klär mich auf, oder ist das so eine art konstanter dynamik
Konstante Dynamik? Manchmal tut mir die Physik leid.
Ich schrieb doch deutlich "aufgrund der FEHLENDEN" Notwendigkeit, die Positionen meiner Graphiken dynamisch zu halten,..."
Also ist es kein Widerspruch. Und zwecks Anpassung an die benutzereigene Auflösung gibt es doch kein Problem, da das ja automatisch auf Passung skaliert wird.
Es dient lediglich in der orthogonalen Ansicht und auch nur wenn etwaige Funktionen zur Umrechnung nicht implementiert werden sollen. Gerade für Anfänger ist es sicher nützlich, da oft die Bitte um Erklärung der gluUnProject Funktion kommt und es oft doch nicht verstanden wird.
Ich hoffe, ich konnte jetzt verständlich machen, was der Sinn ist.
Oder scheint es euch immer noch vollkommen dunkel
mfG, Killian
_________________ Die Antwort ist 17, aber wie lautet die Frage?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Extrawurst: In diesen Themen bitte nur die Projektstaties. Fürs nächste mal kannst du auch spontan selber einen Thread unter Meinungen erstellen.
Da ich selber gerade noch ein wenig unausgeschlafen und unentschlossen bin trenne ich die Beiträge noch nicht in ein extra Thema ab. Lässt sich auch später noch machen.
Killian: Ich denke mal dir fehlt an der ein oder anderen Stelle noch ein bisschen Hintergrundwissen. Dein engagement gleich ein Toll mit PDF Hilfe zu machen finde ich wirklich klasse. Aber (ich weiß das gefürchtete aber ) glOrtho bietet eigentlich schon alles was man braucht. Es ist problemlos möglich, dass sich deine Koordinaten wie im Windows verhalten oder ganz komisch.
Du hast bei glOrtho 4 Parameter mit denen du deine Koordinaten komplett beeinflussen kannst. (left, right, bottom, top). Je nachdem was du dort für Werte angibst kannst du festlegen wo oben, unten, recht, links ist. Ich denke mal das sinnvollste ist ein kleines Beispiel.
Code:
glOrtho(0,1,1,0,...);
Mit diesem Aufruf müssen deine Koordinaten in folgenden Bereichen befinden.
Links = 0
Rechts = 1
Oben = 0
Unten = 1
Tauschen wir jetzt Top und Bottom würden deine Koordinaten in der Y Richtung auf dem Kopf stehen. Wenn du aber anstelle von 1 jeweils die Breite und Höhe deines RCs (glViewport) angibst, dann sind die Koordinaten so wie sie im Windows wären. Und du kannst mit 100, 100 genau das Pixel 100, 100 ansprechen. So wie es in dem Selection Code der Fall ist.
Was einige hier im Forum ganz gerne machen ist eine feste Auflösung von z.B. 640 x 480 einstellen. Dann wird der Inhalt automatisch auf das Fenster angepasst. Was bei Unachtsamkeiten zu argen Verzerrungen des Inhalts führen kann. Für mich persönlich macht das nicht immer Sinn. Wenn man eine größe Bildschirmauflösung hat sollte man das auch sehen.
@ Extrawurst Kein Problem, ich habe mich auch schon mal verlesen.
@ Lossy eX
Danke für die Hilfe. Natürlich liegst du mit deiner Vermutung hinsichtlich meiner "Fachkompetenz" für OpenGL vollkommen richtig. Ich arbeite ja auch erst seit ein paar Wochen mit euren Tutorials.
Daher waren mir die von dir hier angezeigten Eigenschaften der orthogonalen Ansicht nicht bewusst, oder jedenfalls hatte ich sie bis dato nicht richtig verstanden.
Damit wäre mein Tool natürlich ohne Zweck, was nicht weiter schlimm wäre, müsste ich nun nicht alle(!) Koordinaten in meiner Anwendung nun doch noch mal ändern um den Code zu optimieren.
Nur eine Verständnisfrage:
Wenn ich mit glOrtho(left, right, bottom, top) die Grenzen gemäß der aktuellen Bildschirmauflösung festlege, kann ich dann danach jeden Quader direkt mit Windows-Koordinaten positionieren oder ist dennoch eine Konvertierung notwendig. Die Windowskoordinaten sind ja immerhin Integer-Werte, keine Gleitkommazahlen.
Frage ok, oder bin ich gerade verwirrt?
mfG, Killian
_________________ Die Antwort ist 17, aber wie lautet die Frage?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja das geht dann. Wenn du natürlich als Position 122.5, 233.678 angibst, kannst du net wirklich wissen welches Pixel dann zu wievielen Teilen gefüllt ist. Deshalb benutzt man dann zur positionierung immer Ganzzahlen, auch wenn man Floatzaheln verwenden könnte(!).
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Killian: Kein Problem. Dafür sind wir ja da. Und ja du müsstest dann natürlich alle deine Koordinaten wieder anpassen. Aber im Normalfall sollte so etwas alles recht fix gehen. Andersherum wäre es schwieriger wie du ja selber gesehen hast.
Die Sache mit den Fließkommazahlen ist zugegebener Maßen ein wenig verwirrend auf den ersten Blick aber man kann mit Double auch ganze Zahlen speichern. Fließkommewerte werden im Speicher getrennt als Basis und Exponent abgelegt wodurch man einen recht großen Wertebereich bekommen kann. Somit ist auch gewährleistet, dass du bei Werten um die 30000 noch eine recht hohe Genauigkeit hast. So viel zum Miniexkurs in die Datentypwelt von Heute.
Flash: Normal wird es so aufgeteilt wo mehr drinn ist. Bei Texturen wird meines Wissens aber dann liniear interpoliert. Was bei harten Kanten ein wenig komisch aussieht, weil 1 ursprungspixel dann auf 2 Pixel aufgeteilt wird. Hatte das Problem mal bei den alten Komponenten. Da hing noch was hinter der position dran und die Schrift sah ziemlich beknackt aus. Aber egal. Ich denke mal da haben die Treiber auch ein bisschen Entscheidungsfreiheit. Nicht viel aber immerhin.
Wobei es für reine 2D Sachen ja auch noch glVertex2i gibt. Die erlauben nur Ganzzahlen und damit ist man dann definitiv auf der sicheren Seite.
PS: Mit der Erlaubniss aller Beteiligten vor allem des Threaderstellers, würde ich auch vorschlagen das Thema woanders hin zu verschieben. Also OpenGL Forum etc.
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.