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

Aktuelle Zeit: So Jul 13, 2025 21:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texture Formats?
BeitragVerfasst: Di Sep 13, 2005 13:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich weiß... eigentlich sollte ich das wissen *g* Aber irgendwie habe ich mich noch nie damit beschäftigt und irgendwie brauchte ich es auch nochnie...

Ich habe eine 3000x3000 textur die ich in mehrere 256x256er aufteile.. die vielen kleinen Texturen stelle ich dann auf mehreren Quads wieder so dar, das im endeffekt wieder das 3000x3000 große bild zu sehen ist im Viewport.. :)

Die sache ist jetzt die, das ich zwischen den einzelnen Quads kleine seams sehe.. also kanten...
Wie bekomme ich die weg??? Bzw.. mag mir jemand kurz erklären (oder evtl weiß wer ne gute erklärung irgendwo) was die einzelnen parameter Wrap S/T und Min/Mag Filter machen???

Code:
  1. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  2. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  3. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  4. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);


So mache ich es im moment.

Au'revoir,
Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 14:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich denke ich weiß was du meinst. Habe das auch gerade mal ausprobiert. Ich denke mal ich habe ne Idee wie man es beheben kann.

Was passiert da eigentlich genau? OpenGL Filtert die Texturen und je nach eingestelltem Wrap fährt er auf der anderen Seite der Textur fort (repeat) oder bleibt stehen und zieht die letzte Reihe in die Länge (clamp_to_edge). Und wenn man eine fließende Form (komplexes Bild) erhalten möchte sind beide Resultate nicht besonders gut geeignet. Vor allem rühren die Probleme daher, dass OpenGL in der Textur nicht weiß wie es weiter gehen soll.

Deswegen mein Vorschlag. Verwende als erstes 512x512 Texturen und benutze davon lediglich 510x510. 1 Pixel als Rand wird nicht mit dargestellt aber dennoch gefüllt. Du würdest sozusagen die Texturen ein Pixel überlappen.
Am Rand der Bildes kannst du das Pixel mit benutzen oder du musst die jeweils letzte Pixelreihe oder Spalte verdoppelst. Anderfalls würden Filterunschönheiten entstehen. Filterunschönheiten, da er beim Filtern auch auf das nächste Pixel zugreifen wird und wenn das schwarz wäre würde ein "dreckiger" Rand entstehen. Was normal mit clamp_to_edge verhindert würde. Hier aber nicht funktionieren würde, da wir uns nicht am Rand befinden würden.

Dieser "dreckige" Rand müsste bei dir jetzt auch schon existieren. Und zwar Links und Unten oder Oben (je nach Texturausrichtung).

Klar ist das ein wenig speicheroverhead. Deswegen aber auch 512x512 Texturen. Dann wäre es geringer. Außerdem wüsste ich nicht wie man die Filterung sonst austricksen könnte.

PS: Beim Überlappen meinte ich lediglich die Texturen! Die Flächen aus denen du dein Bild zusammen setzt sind 510x510 Pixel. Die Texturen würden von 1 bis 510 auf den Flächen liegen.

Ich hoffe das war noch irgendwo verständlich wie ich das meinte?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 14:48 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

jap war verständlich.. :)
nur, muß ich dann die UV Koordinaten irgenwie auch von 0.01 bis 0.99 oder so machen oder clipt OpenGL generell das äußerste Pixel der Textur weg???

Au'revoir,
Aya~

PS: Was genau ist eigentlich MipMapping??? Weil ich muß das Bild so darstellen wie es wirklich ist, sprich wie es z.B. Photoshop auch darstellen würde.. mipMapping brauche ich dabei doch garnicht, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 15:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
http://wiki.delphigl.com/index.php/Mipmap ;-)

Ähm. Wie jetzt. Genau so? Also glOtho und ein Pixel der Textur entspricht genau einem Pixel auf dem Bildschirm? Wenn ja, dann vergiss was ich oben erzählt habe und deaktiviere einfach das Filtering. Dann kannste auch die Textur komplette benutzen. Allerdings mit clamp_to_edge. Das mache ich bei meinen 2D Sachen ständig.

OpenGL Clipt normal keine Pixel. Wenn man eine Textur filtert, dann möchte er auf benachbarte Pixel zugreifen, wenn diese nicht existieren aber zwecks Weichzeichner existieren müssten, dann gibbet Unschönheiten. Und ja wenn du Filtern möchtest (musst), dann musst du mit dem Trick arbeiten und die Koordinaten auch entsprechend anpassen. Aber die Werte würde ich Haar genau ausrechnen verwenden.

PS: MipMaps brauchst du bei 1:1 Darstellungen nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 16:01 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
http://wiki.delphigl.com/index.php/Texel_Berechnung
Das sollte weiter helfen ...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 13, 2005 20:40 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Mipmaps sind bei 1:1 Darstellungen aber sehr hilfreich um zu überprüfen, ob auch wirklich nichts gefiltert wird. Denn selbst wenn man alle Filter anhat, die nur irgendwie gehen, wird nichts gefiltert, wenn die Textur 1:1 abgebildet wird.

Noch einfacher zum Überprüfen: Bastel dir mit Photoshop eine 512er Textur die ein Drahtgitter darstellt. Also mit einem Muster gefüllt ist, bei dem ein Pixel Scharz ist, der nächste Weiß, der nächste Schwarz... Einfach abwechselnd. Wenn du das gefiltert wird, erkennt man an der gefilterten Stelle einen grauen Schleier. Das hilft ungemein ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


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 » 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.007s | 14 Queries | GZIP : On ]