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

Aktuelle Zeit: Fr Jul 18, 2025 17:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: 2D OpenGL nullpunkt versetzten?
BeitragVerfasst: Di Aug 15, 2006 20:03 
Offline
DGL Member

Registriert: Fr Aug 12, 2005 21:35
Beiträge: 42
Hi

Habe folgendes problem:

Ich habe eine 2D "scene" auf der die ränder der kontinente dargestellt werden (in der draufsicht).
Nun habe ich mir dafür den x=0 und y=0 von dem OpenGL Context der ja eigentlich unten links ist in die mitte geholt.
Davon ausgehend kann ich nun ja um 180 punkte (=180° der weltkoordinaten richtung ost) nach rechts, sowie -180 punkte (=180° der weltkoordinaten richtung west) und 90 punkte (= 90° der weltkoordinaten richtung nord) sowie -90 punkte (= 90° der weltkoordinaten richtung süd).

Das funktioniert soweit richtig gut. Jetzt ist es aber so das man die map auch mit der maus verschieben kann (nach rechts,links) und da kommt das prob. wenn man jetzt die Map soweit nach rechts schiebt bis mehr als die -180° zu sehen sind (das is also der westlichste punkt der USA / Kanada´s) dann hört da ja die welt auf einmal auf.

Ich möchte nun gern das die welt da nicht aufhört, sondern einfach am 180° punkt (also Australien / Japan) wieder beginnt, und man so eine durchgänige welt hat.

Nun frage ich mich ob es denn nicht möglich ist den Nullpunkt des OpenGL context wärend der laufzeit so zu verschieben das einfach an den punkt -180° gleich der Punkt 180° gesetzt wird.

Es ist einfach schwer das zu erklären doch vieleicht hilft euch das folgende bild dabei zu verstehen was ich meine:
Bild

Danke schon mal.
Nico


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 15, 2006 20:46 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ähm, wie sieht deine Zeichenroutine aus?
Bzw. zeichnest du deine Karte nicht einfach zweimal?
Und zwar nebeneinander, sodass an der Stelle wieder die Welt beginnt. Du musst dann nur ab und zu schauen, dass du durch Mausbewegungen nicht am (richtigen) Rand kommt, sondern du jedesmal wieder in den entsprechenden Punkt von den 2 Welten verschiebst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 16, 2006 08:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich denke mal ich habe so halb verstanden was du möchtest. Aber leider gibt es keine Möglich ihm zu sagen, dass er das automatisch so verändert, dass es aussieht wie eine Art Endloskarte. Darum musst du dich schon selber kümmern.

Interessant wäre mal zu erfahren ob du deine Welt in einem Stück zeichnest oder ob es viel kleinere Stücke sind. Weil normal sollte man davon ausgehen, dass die Ländergrenzen eine gewisse Auflösung haben. Und dabei dann immer zwei Welten zu zeichnen obwohl an maximal nur eine sieht ist irgendwie ein bisschen verschwenderisch und nicht so wirklich optimal. Wenn du also eine Möglichkeit hast da eine Unterteilung hinzubekommen wäre so etwas immer praktisch.

Aber sonst hat i0n0s schon recht. Du musst die Welten nebeneinader zeichnen und beim Scrollen darauf achten, dass du immer innerhalbt dieser Flächen bleibst. Wenn du es unterteilen könntest (oder es bereits ist) kann man aus Performancegründen nur die Quadrate zeichnen die auch tatsächlich sichtbar sind. Aber diese Verschiebung und Anpassung sollte man mit den richtigen Angaben (bei glOrtho) recht einfach erledigen können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 17, 2006 18:46 
Offline
DGL Member

Registriert: Fr Aug 12, 2005 21:35
Beiträge: 42
Lossy eX hat geschrieben:
Ich denke mal ich habe so halb verstanden was du möchtest. Aber leider gibt es keine Möglich ihm zu sagen, dass er das automatisch so verändert, dass es aussieht wie eine Art Endloskarte. Darum musst du dich schon selber kümmern.

Interessant wäre mal zu erfahren ob du deine Welt in einem Stück zeichnest oder ob es viel kleinere Stücke sind. Weil normal sollte man davon ausgehen, dass die Ländergrenzen eine gewisse Auflösung haben. Und dabei dann immer zwei Welten zu zeichnen obwohl an maximal nur eine sieht ist irgendwie ein bisschen verschwenderisch und nicht so wirklich optimal. Wenn du also eine Möglichkeit hast da eine Unterteilung hinzubekommen wäre so etwas immer praktisch.

Aber sonst hat i0n0s schon recht. Du musst die Welten nebeneinader zeichnen und beim Scrollen darauf achten, dass du immer innerhalbt dieser Flächen bleibst. Wenn du es unterteilen könntest (oder es bereits ist) kann man aus Performancegründen nur die Quadrate zeichnen die auch tatsächlich sichtbar sind. Aber diese Verschiebung und Anpassung sollte man mit den richtigen Angaben (bei glOrtho) recht einfach erledigen können.


Also die Map mit den rändern der Kontinente zeichne ich in einem Stück. Hatte auch schonmal daran gedacht das in teilen zu machen jedoch ist das denke ich mal nicht so viel besser in der performenc.

Was die sache mit dem anhängen der welt rechts und links von der eigentlichen welt angeht:
Zur zeit habe ich noch keine wirkliche idee wie ich das umsetzten könnte das ich so ne art entloskarte habe die immer wieder anfängt wenn sie endet (beim verschieben).

Es müßte halt wie eine rolle sein auf der die welt liegt die beim verschieben gedreht wird, aber halt 2D (also nur die draufsicht).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 17, 2006 19:31 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Beispiel:
Deine Karte ist 360 Welteinheiten breit und entspringt bei X: 0 und Y: 0.
Gehen wir mal davon aus, ein User scrollt 180 einheiten nach links, also ist der X-Wert gleich -180.
du könntest in der Scroll-Routine abfragen:
Code:
  1.  
  2. if (x < -180) then
  3.   x := 180;
  4. if (x > 360 + 180) then // man könnte auch 520 schreiben, aber zur Verdeutlichung jetzt mal so
  5.   x := 180;
  6.  


So musst du "nur" eine Karte links und eine rechts von deiner "Hauptkarte" zeichnen. So hätte der User den eindruck, dass die Karte unendlich groß ist.

Hoffentlich hast du mich verstanden :wink:

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Aug 20, 2006 18:35 
Offline
DGL Member

Registriert: Fr Aug 12, 2005 21:35
Beiträge: 42
@Lord Horazont

Danke ddir für den tip, habe es nun hinbekommen.
Dein ansatz war ganz gut hatte aber nen denkfehler. Die abfrage muß so aussehen:
Code:
  1.  
  2.       if (x < -360) then
  3.       x := 360;
  4.       if (x > 360) then // man könnte auch 520 schreiben, aber zur Verdeutlichung jetzt mal so
  5.       x := -360;
  6.  


Ich habe es jetzt so gemacht das ich einmal rechts neben meine eigentliche welt eine 2. gezeichnet habe indem ich die Liste einfach nochmal mit um 360 weltpunkte erhöhte koordinaten darstelle. Das selbe dann auch auf der linken seite jedoch um 360 weltpunkte verringerte koordinaten. Damit habe ich nun anhand der oberen positionsabfrage eine art endloswelt.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]