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

Aktuelle Zeit: Mi Mai 15, 2024 17:19

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: TileMap: Abgeschnittene Grafiken
BeitragVerfasst: Di Jul 02, 2013 22:03 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Hallo, ich bin's mal wieder.
Gerade versuche ich meine TileMap von eine reinen float array in ein Array aus structs umzustellen.
Doch nach der Umstellung sehen die Tile Grafiken anders aus als vorher, irgendwie abgeschnitten in Triangle Form.
Hier mal ein bild wie es vorher aussah:
Bild

Und wie es jetzt aussieht:
Bild

Ich kann mir das nicht erklären, weil im Grunde alles weiterhin klappt, nur einige werden abgeschnitten. Das macht momentan noch keinen Sinn für mich.

So wurde es gezeichnet:
Vertices:
Code:
  1. vertices ~= [vx, vy, 0f]; /// #1
  2. vertices ~= [vx + vw, vy, 0f]; /// #2
  3. vertices ~= [vx, vy + vh, 0f]; /// #3
  4. vertices ~= [vx + vw, vy + vh, 0f]; /// #4


TexCoords:
Code:
  1.  
  2. texCoords ~= [tx != 0 ? (tx / tsw) : tx, ty != 0 ? (ty / tsh) : ty]; /// #1
  3. texCoords ~= [(tx + tw) / tsw,  ty != 0 ? (ty / tsh) : ty]; /// #2
  4. texCoords ~= [tx != 0 ? (tx / tsw) : tx, (ty + th) / tsh]; /// #3
  5. texCoords ~= [(tx + tw) / tsw, (ty + th) / tsh]; /// #4
  6.  


Sprich, es war ein Array aus allen Koordinaten hintereinander weg: [0, 1, 2, 3, 4, ...., N - 1, N];

Und so wird es jetzt gezeichnet:
Vertices:
Code:
  1. vertices ~= vec3f(vx, vy, 0f); /// #1
  2. vertices ~= vec3f(vx + vw, vy, 0f); /// #2
  3. vertices ~= vec3f(vx, vy + vh, 0f); /// #3
  4. vertices ~= vec3f(vx + vw, vy + vh, 0f); /// #4


TexCoords:
Code:
  1.  
  2. texCoords ~= vec2f(tx != 0 ? (tx / tsw) : tx, ty != 0 ? (ty / tsh) : ty); /// #1
  3. texCoords ~= vec2f((tx + tw) / tsw,  ty != 0 ? (ty / tsh) : ty); /// #2
  4. texCoords ~= vec2f(tx != 0 ? (tx / tsw) : tx, (ty + th) / tsh); /// #3
  5. texCoords ~= vec2f((tx + tw) / tsw, (ty + th) / tsh); /// #4
  6.  


vec2f und vec3f sind BTW Strukturen der folgenden Form:
Code:
  1.  
  2. struct vec2f {
  3. public:
  4.     float x, z;
  5. }
  6.  
  7. struct vec3f {
  8. public:
  9.     float x, y, z;
  10. }
  11.  


Das interessante ist, drehe ich die Reihenfolge der TexCoords um, also von 1, 2, 3, 4 zu 4, 3, 2, 1, in etwa so:
Code:
  1.  
  2. texCoords ~= vec2f((tx + tw) / tsw, (ty + th) / tsh); /// #4
  3. texCoords ~= vec2f(tx != 0 ? (tx / tsw) : tx, (ty + th) / tsh); /// #3
  4. texCoords ~= vec2f((tx + tw) / tsw,  ty != 0 ? (ty / tsh) : ty); /// #2
  5. texCoords ~= vec2f(tx != 0 ? (tx / tsw) : tx, ty != 0 ? (ty / tsh) : ty); /// #1
  6.  


Dann sieht meine Karte folgendermaßen aus:
Bild

Also die Tile Grafiken werden wieder vollkommen angezeigt, nur Spiegelverkehrt.

Weiß jemand was da los ist? Beachte ich etwas nicht?
Als Info kann ich sage, dass ich kein Offset beim glVertex oder glTexCoord Pointer angebe, da beides getrennte Buffer sind.
Ich habe wirklich keine Ahnung was da schief läuft. Ich bin sicher, es wird nur ein kleiner, dummer Fehler sein. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TileMap: Abgeschnittene Grafiken
BeitragVerfasst: Mi Jul 03, 2013 10:40 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Interessant...
Eigentlich hätten Vertices 3 und 4 schon vorher vertauscht sein müssen. Sofern du GL_QUADS renderst. (siehe Wiki-Artikel)

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TileMap: Abgeschnittene Grafiken
BeitragVerfasst: Mi Jul 03, 2013 11:25 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Ich benutze GL_TRIANGLE_STRIP.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TileMap: Abgeschnittene Grafiken
BeitragVerfasst: Mi Jul 03, 2013 14:17 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Ok. Also sieht das ungefähr so aus? :
Dateianhang:
strip.png


Wenn ich deine Berechnung der Vertices richtig verstanden habe, werden die Triangle-Paare B und D garnicht gezeichnet sondern sind nur 0px breit? Richtig?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TileMap: Abgeschnittene Grafiken
BeitragVerfasst: Mi Jul 03, 2013 15:21 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Wieso sollten sie nicht gezeichnet werden? Ich sehe nicht, wo ich deren Berechnung vergessen habe.
Oder sehe ich den Wald vor lauter Bäumen nicht? Und wieso funktionierte es denn dann vorher?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TileMap: Abgeschnittene Grafiken
BeitragVerfasst: Mi Jul 03, 2013 15:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Nov 30, 2011 21:41
Beiträge: 136
Wohnort: Bad Vilbel
Programmiersprache: Delphi 7
Ich hab mir deinen Code jetzt zwar nicht explizit angeschaut du musst aber beachten, dass der Ursprungs-Punkt auf dem Bildschirm unten links, im Texturespace aber oben links ist. Wenn man das vergisst, dann sind die Texturen auf den Quads (TriangleStrip, was auch immer), genau wie bei dir, horizontal gespiegelt (Y-Achse ist falschrum).

Ansonsten weis ich auch nicht woran es liegen könnte. Es ist mir aber auch nicht ganz klar, was du alles geändert hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TileMap: Abgeschnittene Grafiken
BeitragVerfasst: Mi Jul 03, 2013 16:24 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Ich habe das Array lediglich von float[] auf vec2f[] bzw. vec3f[] umgestellt, womit die Koordinaten nicht mehr explizit hintereinander im Array liegen, sondern in den Strukturen, welche allerdings hintereinander im Array liegen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: TileMap: Abgeschnittene Grafiken
BeitragVerfasst: Mi Jul 03, 2013 19:57 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Ich glaube das war falscher Alarm. Scheint als hätte ich irgendwo einen Rundungsfehler im Script, mal sehen...

edit:
Ja, definitiv. Aus irgendeinem Grund mochte er bei der Structg Variante den 0 float Vergleich nicht, also das != 0. Mit einem > 0 war das Problem dann auch schon behoben... Trotzdem recht merkwürdig.
Aber danke und sorry das ich euch wegen eines so doofen Fehlers belästigt habe. :)


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


Wer ist online?

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