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

Aktuelle Zeit: Do Jul 17, 2025 03:47

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



Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Rand an den Texturen entfernen
BeitragVerfasst: Mi Nov 10, 2004 09:43 
Offline
DGL Member

Registriert: Sa Nov 06, 2004 15:58
Beiträge: 15
Hallo,
ich habe eine große Texture die mehrere Pics (Tiles) enthält.
Um an das jeweilige Tile zu kommen berechne ich entsprechend die Texcoordinaten soweit kein Problem.
Nur beim Rendern krieg ich die unschönen Ränder an den Texturen (im Prinzip sind das die Pixel des jeweiligen nächsten Tiles in der Texture).
Ich denke mal ein Problem ist wohl die ungenauigkeit der float's ich habs schon mit den unterschiedlichsten Filtern und Funktionen probiert, leider ohne
Erfolg. Wiess einer wie ich die Ränder 'sauber' kriege??


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 09:46 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Mach um jedes Tile einen Rand.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 09:49 
Offline
DGL Member

Registriert: Sa Nov 06, 2004 15:58
Beiträge: 15
LarsMiddendorf hat geschrieben:
Mach um jedes Tile einen Rand.


Wie meinst ud das???


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 09:54 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Wenn du am Rand immer Pixel von dem benachbarten Tile mitbekommst, dann hilft es vielleicht was die Randpixel des Tile am Rand nochmal zu wiederholen und so einen Rahmen drumherum zu legen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 09:59 
Offline
DGL Member

Registriert: Sa Nov 06, 2004 15:58
Beiträge: 15
LarsMiddendorf hat geschrieben:
Wenn du am Rand immer Pixel von dem benachbarten Tile mitbekommst, dann hilft es vielleicht was die Randpixel des Tile am Rand nochmal zu wiederholen und so einen Rahmen drumherum zu legen.


Also im Moment sind meine Tiles 64x64 groß und Du meinst ich solle die Tiles dann einfach 65x65 groß machen???


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 10:43 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ja das könnte was bringen und die Randpixel dann verdoppelt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 10:46 
Offline
DGL Member

Registriert: Sa Nov 06, 2004 15:58
Beiträge: 15
LarsMiddendorf hat geschrieben:
Ja das könnte was bringen und die Randpixel dann verdoppelt.


Tja, dann stimmen aber meine Texturekoordinaten-Berechnungen nicht mehr, wenn ich dann sage mein tile ist immer noch 64x64 dann hab ich ja wieder einen rand (1 pixel z.b). sowas in die richtung hab ich schon probiert, ich hab in meiner berechnung einfahcgesagt mein tile wäre 63x63 aber so funzt das nicht


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 13:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Ist deine Textur von der Dimension 2^n*2^n? Wenn nicht, dann wird diese wenn du MipMaps verwendest nämlich durch gluBuildMipMaps auf eine solche Dimension gebracht, und der dort genutzte Filter kann dann dafür sorgen das Nachbarpixel "ineinander" verschwimmen.

Ansonsten würde ich es so machen wie es Lars gesagt hat, aber mit ner kleiner Erweiterung : Du machst also nen 66x66 Pixel breiten Kasten für eine Tile. In dessen Mitte kommt dann die 64x64 Textur, und den Rand der davon nicht ausgefüllt wird lässt du per Alpha ausblenden. Dann sollten auch keine Pixel mehr durch Filtering ineinander verschwimmen.

P.S. : Mehrere Tiles auf einer Textur sind sowieso je nach Verwendung eingeschränkt. Du kannst dann z.B. keine Texturwiederholung nutzen, aber wenn du das nicht brauchst ist das natürlich besser (weniger Statechanges, weniger Speicherverbrauch).

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 13:32 
Offline
DGL Member

Registriert: Sa Nov 06, 2004 15:58
Beiträge: 15
Sascha Willems hat geschrieben:
Ist deine Textur von der Dimension 2^n*2^n? Wenn nicht, dann wird diese wenn du MipMaps verwendest nämlich durch gluBuildMipMaps auf eine solche Dimension gebracht, und der dort genutzte Filter kann dann dafür sorgen das Nachbarpixel "ineinander" verschwimmen.

Ansonsten würde ich es so machen wie es Lars gesagt hat, aber mit ner kleiner Erweiterung : Du machst also nen 66x66 Pixel breiten Kasten für eine Tile. In dessen Mitte kommt dann die 64x64 Textur, und den Rand der davon nicht ausgefüllt wird lässt du per Alpha ausblenden. Dann sollten auch keine Pixel mehr durch Filtering ineinander verschwimmen.

P.S. : Mehrere Tiles auf einer Textur sind sowieso je nach Verwendung eingeschränkt. Du kannst dann z.B. keine Texturwiederholung nutzen, aber wenn du das nicht brauchst ist das natürlich besser (weniger Statechanges, weniger Speicherverbrauch).


Also meine Texture ist 640x640 gross an dem kanns nicht liegen.

Wenn ich nen Kasten mache 66x66
1. wie krieg ich dann all meine Tiles in ne 640 breite texture ???
2. stimmen dann meine berechnungen für die Texturkoordinaten noch ???

oder hab ich es falsch verstanden


Ne Texturwiederholung brauch ich nicht, ich habs deshalb so gemacht wegen der Statechanges, wie Du schon gesagt hast


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 14:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
wolf_10 hat geschrieben:
Also meine Texture ist 640x640 gross an dem kanns nicht liegen.

Dann liegts doch daran. 640x640 ist keine 2^n-Dimension und wird daher von gluBuildMipMaps in passende Dimensionen gewandelt und dabei dann auch gefiltert.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 14:06 
Offline
DGL Member

Registriert: Sa Nov 06, 2004 15:58
Beiträge: 15
Sascha Willems hat geschrieben:
wolf_10 hat geschrieben:
Also meine Texture ist 640x640 gross an dem kanns nicht liegen.

Dann liegts doch daran. 640x640 ist keine 2^n-Dimension und wird daher von gluBuildMipMaps in passende Dimensionen gewandelt und dabei dann auch gefiltert.


Und wie groß muß sie dann sein ???


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 14:08 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die nächst größere ist 1024x1024. Bin mir nicht sicher aber größen wie 512x256 sind auch möglich. Allerdings ist die kleinste passende form bei dir wohl die 1024x1024.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 14:12 
Offline
DGL Member

Registriert: Sa Nov 06, 2004 15:58
Beiträge: 15
Ok,

kann mir das mal bitte jemand näher erklären???
Wäre nett.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 14:18 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
2^n bedeutet "2 hoch n"

1024 sind 2^10

Erst in den neuen Spezifikationen werden auch Texturen unterstützt die andere Formate haben. Das is halt so. :wink:

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 10, 2004 14:20 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 14, 2004 18:56
Beiträge: 804
Wohnort: GER/OBB/TÖL-WOR/Greiling
2^n bedeutet, dass die textur z.b. 2^4 = 2x2x2x2 = 16 Pixel breit bzw. hoch sein muss. Also 64x64 oder 128x128 oder 1024x512 Pixel. und 640x640 lässt sich eben nicht dur 2^n ausdrücken.

_________________
Bild

"User Error. Replace User and hit Continue."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 29 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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