ich hab erst heute angefangen mich mit der Sache OpenGL zu beschäftigen und das aus gutem Grund:
Ich hab in meinem kleinen Proggi das Problem das ich Geographische Koordinaten darstellen will.
Die sind aber alle in Real ( grad/min/sec in DEG umgerechnet ).
Nun kann man ja bekanntlich auf irgendeinem Bild, Canvas oder so keine Kommastellen darstellen.
Ich hab schon umrechnungsfaktoren und so versucht, habs aber nicht hinbekommen.
Nun will ich das mit OpenGL versuchen, scheint mir bis jetzt auch so als könnte das klappen.
Das ganze müsste auch nur in 2D sein, das würde mir völlig reichen.
Ich hab aber so meine Verständnisprobleme.
Als erstes hab ich seit heute früh das Einsteigertutorial nachvollzogen und es ging eigentlich auch.
Dann hab ich versucht ( brauch ja nicht die ganze Form als OpenGL ) das ganze erst mal auf ein Panel zu zaubern.
Gesagt getan, es funktioniert sogar.
Nun hab ich aber gelesen das die OpenGL koordinaten von Links unten nach oben und rechts gehen.
Also y0 ist links unten und y100 wäre doch links oben ja ?
x0 sollte dann links unten x100 rechts unten sein oder ?
Hmm, entweder ich hab was falsch verstanden oder ich mach hier irgendwas falsch ?
Bei From.Create hab ich einfach das hier geändert :
Code:
//Hier wird der Gerätekontext (Device Context) von Formular Form1 abgefragt.
DC:= GetDC(panel1.Handle);
Das macht ja das Panel zum Gerät auf dem das OpenGL asgegeben wird ja ?
das Problem ist nur das das hier :
Code:
glBegin(GL_LINE_STRIP);
glColor3f(rRed,rGreen,rBlue);
glVertex2d(0,0);
glVertex2d(10,10);
glEnd;
bei einem Panel von 200x200 nit eine Linie von Links unten nach rechts oben macht ?????
Die Linie beginnt mitten auf dem Panel ????
Warum ist das denn so ??
Weiterhin hab ich das mit dem
Code:
glViewport(0,0, panel1.Width, panel1.Height);
Vieport noch nicht so richtig verstanden. Vielleicht liegts ja auch daran.
Ich versuchs mal ..... Ich denk ja das das heisst das jetzt die Ausgabefläche auf der die jeweiligen Punkte , linien usw. dargestellt werden von Links unten in dem Panel bei 0x0 nach rechts oben von dem Panel 200x200 ist.
Ist das richtig ???
Ich hab schon gesucht, viel gelesen und ( denke ich ) auch einen kleinen Einstieg bekommen, jedoch sind da noch so einige ( und ich denke ) sehr wichtige Verständnis Fragen bei mir Offen.
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Du befindest dich vorraussichtlich im Perspektivenmodus von OpenGL. Dort sizt du als Betrachter standardmäßig direkt im Ursprung. Möchtest du nur den 2D-Modus verwenden, dann solltest du statt gluPerspective besser glOrtho verwenden. Man muss aber generell unterscheiden zwischen dem eigentlichen Ursprung von OpenGL (links unten) und dem Ursprung, den du mit dem Zeichnen verknüpfst. Es gibt viele Befehle, die beziehen sich auf den eigentlichen OpenGL-Ursprung (z.B. glViewport, glScissor etc.). Das sind immer Befehle, die sich irgendwie auf dein „Bild“ auswirken. Befehle, die du nutzt um etwa Primitive zu zeichnen beziehen sich auf den anderen Ursprung. Diesen kannst du dir nach belieben festlegen. Alle Primitive werden prinzipiell relativ zum Ursprung gezeichnet und mit den Manipulationen der Modelviewmatrix (also allen möglichen Verschiebe-, Rotations- und Skalierungsfunktionen) kannst du diesen verschieben. Ich hoffe ich verwirre dich jetzt nicht mehr als ich dir helfe.
Ich kann dir empfehlen noch ein paar mehr der Einsteigertutorials durchzuarbeiten. Dann wird vielleicht auch vieles klarer.
Es ist nur schwer in den Einsteigertutorials gleich alles zu erklären ohne noch mehr Verwirrung zu stiften.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Jo denk ich auch. Aber bevor du dich auf das 2D tutorial stürzt mal folgender Vorschlag.
Wenn du zu deinen geographischen Koordinaten noch höhenangaben hast, ist es in OGL problemlos möglich diese auch 3Dimensional darzustellen. Dazu musst du dich natürlich vom 2D modus verabschieden. Es wäre aber auch nicht sonderlich schwehr zwischen 2D und 3D umzuschalten, je nach wunsch des Users.
Die 3D Ansicht ist nur anscheinend schwehrer zu verstehen als die 2Dimensionale. Deshalb wie Magellan geschrieben hat, erstmal die Einsteigertutorials beackern, und mal paar kleine Szenen bauen (paar linien, und dreiecke) um darin die Orientierung zu lernen. Auch mal versuchen dann die Ansicht zu wechseln, um zu begreifen wieso das dann anders aussieht. Danach wirst du sicherlich keine Probleme mehr haben, deine Anwendung zu striken.
PS: OGL ist definitiv die richtige Wahl für derlei Aufgaben. Solche Visualisierung wird des öfteren mit GL-Gemacht.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
bin gerade nach Hause gekommen und hab Eure Antworten durchgelesen.
Jetzt werd ich Euren Rat befolgen und erst mal die Tutorials die ich schon gelesen habe nochmal lesen und weiter auch noch lesen.
Aber wenn ich das jetzt richtig verstanden habe, dann ist das bei 3D so das der Mittelpunkt immer bei 0x0 ist und in der Mitte meines Panels sein müsste oder ??
Wenn ja , dann müsste ja die x Achse von 0, in der Mitte des Panels bis Panel.width/2 in plus richtung nach rechts gehen und das gleiche bei y nach oben oder ?
Das ganze müsste dann aber ( so wie ich das verstanden habe ) noch von dieser angabe abhängen :
glTranslatef(0, 0, -5);
Das verschiebt doch das was ich Zeichne um -5 Einheiten nach "hinten", also auf der Z-Achse oder ?
Hab ich das so in etwa erst mal bis dahin richtig verstanden ?
Matthias
Ach so, das mit den Höhenangaben stimmt. Die hab ich auch. Ich dachte nur das das dann für den Anfang noch schwieriger ist ... na mal sehen. Man lernt ja nie aus
Registriert: Di Nov 26, 2002 22:12 Beiträge: 259 Wohnort: Dresden
Perspektivenkoordinaten lassen sich nicht so einfach auf die Größe deines Panels zurückführen. Das ist auch logisch. Weit erntfernte Objekte sollen kleiner erscheinen als nahe. In großer Entfernung kann also auch ein Berg der mehrere "Kilometer" breit ist auf deinen Bildschirm passen, während in der Nähe nicht mal dein Auto komplett drauf passt.
Darum schiebst du z.B. deine Objekte auch etwas nach "innen". Direkt auf deiner "Linse" wären sie so groß, dass sie dir nur als große Flächen erscheinen würden. Deine Hand kannst du direkt vor deinem Auge auch nur noch als Fleck erkennen.
Aus dem Grund spricht man im Perspektivenmodus auch eher von Einheiten, denn mit Pixeln hat das nichts mehr zu tun. Die X-Achse läuft also positiv nach rechts bis ins Unendliche. Die anderen Achsen verhalten sich genauso. Der Ursprung liegt aber mit Siehcerheit in der Mitte deines Panels, soweit dein Viewport die selbe Größe wie dein Panel hat.
_________________ Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650
also hab ich das ja so halbwegs verstanden.
Was ich noch nicht so wirklich verstehe ist folgendes :
Um mal ein konkretes Beispiel zu nennen, ich habe folgende Punkte
Flughafen Leipzig
Das Aiport Zentrum ist bei
Lat=51.414997
Lon=12.226944
Das ist der Mittelpunkt des Flughafens und müsste dann auch der Mittelpunkt in der Scene werden.
Die nördlich Startbahn hat folgende Koordinaten :
Runway 08/26 Nordbahn:
Punkt 1 : Lat=51.431213 Lon=12.216202, das müsste dann der Startpunkt der ersten Linie werden
Punkt 2 : Lat=51.433655 Lon=12.267141, das müsste dann der Endpunkt der ersten Linie werden
Runway 10/28 Südbahn:
Punkt 3 : Lat=51.418011 Lon=12.209863, das müsste dann der Startpunkt der zweiten Linie werden
Punkt 4 : Lat=51.412144 Lon=12.243788, und das dann der Endpunkt der zweiten Linie.
Wenn ich das darstelle sollten auf der Scene dann zwei Linien erscheinen.
Eine etwas nördlich des Mittelpunktes ( Nordbahn ) und eine etwas Südlich des Mittelpunktes.
Das ist eigentlich schon alles. Alles weitere bekomm ich dann schon hin.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die z-Achse geht in die Tiefe. Das ist schon richtig. Aber wenn bei dir höhe heist das es nach oben gehen soll, dann muss du die höhe auf die Y-Koordinaten legen. Denn die Y-Achse zeigt nach oben.
Und wegen den Koordinaten. Da bin ich mir nicht sicher. Das sind soweit ich das zu wissen glaube, Kugelkoordianten. Zwar ist die Kugel verdammt groß aber trotzdem. Wenn du diese Kugelkoordinaten versuchst auf einer Ebene plattzudrücken, dann verfälscht du zwangsläufig die abstände. Das mag mitunter minimal sein, aber der korrektheit wegen, sollten die schon umgewandelt werden müssen.
Hab gerade mal google angeschmissen und das gefunden: http://www.killetsoft.de/orttlref.htm Dort findest du was zur "Längenberechnung mit geographischen Koordinaten".
Die Google mit den Suchworten "geographische koordinaten umrechnen" könnte auch noch hilfreich sein.
Wenn nicht zufällig ein DGLer das schonmal gemacht hat, wirst du den Teil allein bewältigen müssen. GL-fragen können wir natürlich trotzdem weiter diskutieren.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
ich danke Euch erst mal für die Antworten und für die Hilfe !!
Das mit den Koordinaten können wir so belassen. Die sind schon so umgerechnet.
Sind also schon Metrisch.
Ausserdem ist ja die Fläche eines Flughafens nich so gross das das ins Gewicht fallen würde.
Trotzdem Danke für den Link, die Seite ist gut, schöne Beschreibung.
Ich glaub ich lass die höhe erst mal auf 0. Das bringt mich ja noch mehr durcheinander.
Ich versuch erst mal am Beispiel von Leipzig die beiden Bahnen hinzuzaubern womit ich so meine Probleme habe.
Aber ich probier da mal noch weiter rum, denn nur so lernt man es ja.
Ich glaub ich les noch weiter in den Tutorials und spiel erst mal noch ein bischen mit den ganzen Befehlen rum.
Ein Einfall den ich vorhin hatte war die scene dann drehbar zu machen, also von der Draufsicht,
wo x von links nach rechts und y von unten nach oben geht und z in die Tiefe , das dann so um die x Achse
drehen das man dann das Höhenprofiel sehen kann.
Aber ich denke bis dahin hab ich noch viel arbeit vor mir
Ich meld mich aber sicher bald mit den nächsten Unklarheiten und Fragen
Hmm, leider seh ich d gar nichts.
Hab auch schon mit anderen werten für translatedef versucht, aber irgendwie erscheint da
gar nichts auf der Scene.
Was mach ich denn da falsch ?
Ich hab ein anderes Programm was auch so was ähnluiches macht und hab mir mal das airport Diagramm von Leipzig ausdrucken lasse.
So seht ihr mal was da eigentlich rauskommen soll.
Allerdings nur die Runways, die ganzen Rollwege brauch ich nicht.
Könnt ihr nochmal irgendwie helfen ?
Dank Euch
Matthias
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: So Feb 06, 2005 17:29 Beiträge: 187
Programmiersprache: C, C++
Vorweg, was ist Lat und Lot? Muss wohl zur Allgemeinbildung gehören
Erstmal würde ich alle unnötigen Befehle aus der Renderroutine nehmen (Ich weiss selber, dass da beim herumexperimentieren schnell ne Menge Schrott reinkommt).
Code:
// Zentrum des Airports Leipzig
rCenterLat :=51.414997;
rCenterLon :=12.226944;
rCenterAlt :=465;
Muss ja nicht jedes Mal aufgerufen werden, wenn sich der Flughafen nicht bewegt.
Die Perspektive brauchst du im Normalfall auch nur einmal zu setzen (z.B. wenn das Fenster verändert wird). Das gltranslatef ist überflüssig.
Code:
glTranslatef(rCenterLat, rCenterLon,-1);
Hier ist wahrscheinlich der Grund, dass du nichts siehst. Geh mal mehr als -1 Einheit nach Hinten. FarClippingplane bei gluPerspective muss auch groß genug gewählt werden.
Code:
glBegin(GL_LINES);
// Runways color rot
glColor3F(1,0,0);
...
glEnd;
Ich glaube glColor muss ausserhalb des glBegin-Blocks aufgerufen werden, damit es wirkt.
Das glPushmatrix und glPopmatrix ist auch überflüssig, so wie es im Moment ist.
Lat und Lon sind Latitude und Longitude des Punktes, also gleichzusetzen mit x und y.
Sind halt Geo Koordinaten.
Ich bin grad dabei eine kleine Anwendung zu schreiben bei der ich alle werte ändern kann.
Also ich brauch nicht jedesmal neu zu starten wenn ich einen Wert ändern will.
Ist gleich fertig, dann poste ich hier mal das gesammte Projekt damit es für Euch nachvollziehbarer wird.
Ich muss erst mal das Koordinatensystem bei OGL verstehen lernen und die ganzen Befehle. deswegen will ich mal mit allem rumprobieren.
Hast sicher Recht, das da einiges nicht reingehört und auch einiges überflüssig ist, aber das ist glaub ich
zum probieren erst mal nicht so wild.
Ich muss erst mal sehen und begreifen welchen Zusammenhang die Befehle haben.
Also bis gleich erst mal...Danke, mir hilft glaub ich alles Matthias
@AI: glColor muss innerhalb glBegin..glEnd aufgerufen werden können, sonst könnte man ja nur einfarbige Polygone zeichnen. Man kann für jeden Vertex durchaus eine eigene Farbe angeben, die glColor Anweisung bezieht sich auf alle nachfolgenden Vertices.
_________________ Manchmal sehen Dinge, die wie Dinge aussehen wollen, mehr wie Dinge aus, als Dinge.
<Esmerelda Wetterwax>
Es kann vorkommen, dass die Nachkommen trotz Abkommen mit ihrem Einkommen nicht auskommen und umkommen.
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast
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.