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

Aktuelle Zeit: Mo Jul 14, 2025 21:52

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturfilterung und VSync
BeitragVerfasst: Do Mär 08, 2012 21:55 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Hallo,

seit langer Zeit komme ich nun wieder etwas dazu, mich mit OpenGL zu beschäftigen. Ich arbeite an einem kleinen 2D-Game das auf Tiles basiert.
Ich habe eine große Textur in der ich alle Tiles speichere. Beim Zeichnen wähle ich dann über die Texturkoordinaten das entsprechende Tile aus.

Nun scheint mir OpenGLs Interpolation dabei einen Streich zu spielen, da Tiles, die sich in der Textur am Rand befinden, so interpoliert werden, dass Ränder entstehen, die sich vor allem beim Bewegen der Kamera bemerkbar machen. Meine Idee war es, also die Interpolation abzustellen (GL_NEAREST). Dadurch verschwinden diese Lücken, aber beim vertikalen scrollen sieht man an diversen Kamerapositionen plötzlich dicke Streifen. Das Ganze scheint mit der Framerate zusammenzuhängen, da dies nach einer Beschränkung auf 100FPS nicht mehr auftritt.

Hier eine Grafik zu dem Problem:

http://dl.dropbox.com/u/27681596/gltile.png

Ist die Beschränkung der FPS zusammen mit GL_NEAREST das in diesem Falle angemessene Mittel oder gibt es eine elegantere Lösung?

Viele Grüße,
Seth


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturfilterung und VSync
BeitragVerfasst: Do Mär 08, 2012 23:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Ist die Beschränkung der FPS zusammen mit GL_NEAREST das in diesem Falle angemessene Mittel oder gibt es eine elegantere Lösung?

GL_NEAREST ist keine gute Lösung, es sei den du willst extrem häßliche Texturen wann immer zwischen zwei Texturtexel zugegriffen wird.


Mögliche Lösungen:
1. Baue dir einen Shader der vor dem Texturzugriff ein "Clamp to Edge" für des entsprechende Tile ausführt. Du beschränkst die Koordinaten also auf die Mitte der jeweiligen Randpixel der Tiles.

2. In deiner großen Textur die deine Tiles enthält bekommt jedes Tile einen zusätzlichen 1px Rand indem du einfach den jeweiligen Randpixel noch einmal wiederholst. Also aus einem 128x128 Tile wird 130x130. Damit löst du das Problem wie von selbst, allerdings wird die Berechnung der Tile-Position etwas komplizierter. Wenn du Anisotropen-Filter benutzt ist ein 4px Rand ratsam.

Beide Lösungen bekommen Probleme wenn Mipmaps generiert werden. Bei der 2. Lösung kannst du allerdings zumindest die Randdicke verdoppeln um eine weitere Mipmap-Stufe sauber erzeugen zu können. Also wenn du das Tile in einem Viertel der Größe anzeigen willst musst der Rand viermal so dick sein.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturfilterung und VSync
BeitragVerfasst: Fr Mär 09, 2012 01:45 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Ich könnte auch die Textur um ein ganzes Feld nach innen verschieben und da dann einen Pixel drum malen. Ich halte die Lösung nur nicht für sonderlich elegant. Das mit dem Shader klingt schon vielversprechender. Ich werde das mal ausprobieren, danke.


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 18 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.008s | 17 Queries | GZIP : On ]