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

Aktuelle Zeit: Do Jul 03, 2025 11:37

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Viewport einer TileMap
BeitragVerfasst: Fr Sep 13, 2013 10:46 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Ok, habe es nun geschafft, glScissor so anzupassen, dass dieser View
Bild
Korrekt angezeigt wird:
Bild

Mittels:
Code:
  1. glScissor(90, 640 - 150, 60, 60);


Doch wie kann ich diesen Ausschnitt nun bspw. an die Stelle 0|0 schieben/anzeigen lassen?
Also das es so aussieht:
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Viewport einer TileMap
BeitragVerfasst: Fr Sep 13, 2013 11:08 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Indem du zuerst die glScissor-Koordinaten anpasst (also x=60, y=640-60), um den Ausschnitt zu verschieben, und dann glTranslatef(-60,±90) (nagel mich auf die Werte nicht fest) aufrufst, damit deine TileMap entsprechend verschoben wird.

grüße

_________________
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: Re: Viewport einer TileMap
BeitragVerfasst: Fr Sep 13, 2013 11:17 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Nein das tut es nicht wirklich. Wieso muss ich überhaupt die glScissor Koordinaten anpassen? Die "schneiden" doch meinen Ausschnitt zurecht.

edit:
Es klappt mit:
Code:
  1.  
  2. glScissor(0, 640 - 60, 60, 60);
  3. glTranslatef(-90, -90, 0);
  4.  


Mein Fehler.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Viewport einer TileMap
BeitragVerfasst: Fr Sep 13, 2013 19:00 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Nochmal ich: ich habe immer noch nicht ganz mitbekommen/verstanden, was ich tun muss, um die TileMap vorher zu bewegen (z.B. auf die Position 250|250) und dann erst den Ausschnitt zu machen.
Ist dies möglich oder muss ich dann mit glScissor/glOrtho tricksen?

edit:
Um das besser zu verdeutlichen:
Kann ich _vorher_ die Map mit glTranslatef irgendwie verschieben und _danach_ dann glScissor anwenden?
Beispiel: Ich habe ein Fenster der Größe 1024x640 px. Ich will meine Map an der Position 250|50 (obere linke Ecke) haben. Der Ausschnitt soll an der Map Position 90|90 starten (obere linke Ecke) und soll 60px breit und hoch sein.

Ist das irgendwie so möglich? (Kein originaler oder funktionierender Code, sondern dient nur zum veranschaulichen)

glTranslatef(250f, 50f, 0f);
glScissor(90, 640 - (90 + 60), 60, 60);

Oder muss ich zu so einem Trick/Hack greifen?
glScissor(90 + 250, 640 - (90 + 50 + 50), 60, 60);
glTranslatef(250, 50, 0);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Viewport einer TileMap
BeitragVerfasst: Fr Sep 13, 2013 19:33 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
glScissor wird von glTranslate nicht beeinflusst. Scissor nimmt immer Fensterkoordinaten. glTranslate nimmt „Weltkoordinaten“, das ist bei passend eingestelltem glOrtho aber das gleiche. Keiner der beiden Schinpsel funktioniert aber, da du wieder Fenster- und Weltkoordinaten mischst. Nimm die 90 und 60-Summanden aus x und y von glScissor raus. Dann musst du noch deine Map korrekt Translaten, wenn du an Map-Position 90/60 starten willst (glTranslate(-90, -60, 0) oder mit anderem Vorzeichen) und dann sollte der zweite Schnipsel funktioniern.

grüße

_________________
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: Re: Viewport einer TileMap
BeitragVerfasst: Fr Sep 13, 2013 20:07 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Der zweite Schnippsel funktioniert bei mir. :shock:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Viewport einer TileMap
BeitragVerfasst: Sa Sep 14, 2013 14:01 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Okt 03, 2007 14:22
Beiträge: 388
Schau Dir den Schnippsel aber doch lieber nochmal an, oft hat man einfach nur unglückliche Sonderfälle bei denen es funktioniert. Wenn Du es mit Horazonts Erklärungen auch hinkriegst, dann dürfte das ein weitaus sicherer Weg sein.

_________________
Meine Musik: spiker-music.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Viewport einer TileMap
BeitragVerfasst: Sa Sep 14, 2013 14:13 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Ich möchte den Ausschnitt an den Map-Koordinaten 90|90 anfangen lassen. Die Map wiederum soll an der Position 250|50 anfangen.
Also würde laut Horazont glScissor so aussehen, oder?
Code:
  1.  
  2. glScissor(250, 640 - 150, 60, 60); // (90 + 60) = 150 -> 90 y Koordinate ; 60 Höhe
  3.  

Aber Inwiefern muss ich meine Map nun verschieben? Um 90|90, also
Code:
  1. glTranslatef(90, 90, 0);
, oder nicht?
Oder vermische ich wieder was?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Viewport einer TileMap
BeitragVerfasst: Sa Sep 14, 2013 14:21 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Nur um es schon einmal zu verraten: Das funktioniert, im Gegensatz zum vorherigen (aber scheinbar falschen) Ansatz, nicht.

edit:
Wenn wir schon dabei sind: Es wäre sicher sehr hilf- und lehrreich, wenn ich gleich verstehe, warum und was an meinem obigen Ansatz falsch ist und warum er trotzdem funktioniert.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Viewport einer TileMap
BeitragVerfasst: Fr Sep 20, 2013 12:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich glaube ich verstehe deine Positionsangaben nicht. Mal ganz abstrakt:

Wir haben die Welt-Koordinaten wx und wy, die angeben, welcher Punkt der Welt (lies: Map) in der oberen linken Ecke des sichtbaren Ausschnitts sein soll. Weiterhin haben wir die Fenster-Koordinaten fx und fy, welche angeben, wo im Fenster (von unten links aus gemessen) die obere Linke Ecke des sichtbaren Ausschnitts sein soll. Weiterhin noch fh und fw, die Höhe und Breite des sichtbaren Ausschnitts und sh, die Höhe des gesamten Fensters.

Dann braucht es folgende Aufrufe:
Code:
  1. glScissor(fx, sh-(fx+fh), fh, fw);
  2. glTranslatef(-wx, -wy, 0);
  3. glTranslatef(fx, fy);

Die letzte Zeile gilt nur, wenn keine Skalierung/Rotation/… angewandt wurde und glOrtho so konfiguriert ist, dass die Einheiten „Pixel“ und „Weltkoordinate“ identisch sind.

_________________
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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 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.011s | 15 Queries | GZIP : On ]