Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
hat jemand von euch schonmal versucht ne 1D-Textur zu laden, oder zu erstellen? Ausm gefühl herraus würde ich jetzt einfach eine Textur erstellen, die 1x128px groß ist oder so, aber wie würde ich die Laden und wie legt man da Texturkoordinaten für fest? hat da jemand erfahrung mit, ansonsten tüftel ich einfach mal etwas herum und schreibe meine Erkenntnisse hier hinein.
Funktioniert genauso wie eine 2D-Textur...nur das eben alles 1D ist...
Zum Beispiel nutzt du dann einfach die Funktion glTexImage1D statt glTexImage2D, usw...
Wie das mit den Texturkoordinaten funktioniert bin ich mir gerade nicht sicher. Ich hab solche Texturen bisher nur im Shader benötigt. Wenn man einem Vertex irgendwie nicht nur eine Texturkoordinate geben kann wird wahrscheinlich einfach die erste Koordinate genommen.
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
ganz so einfach will sich das bei mir leider nicht anstellen. ich habe ne *.Raw Datei erstellt, die 1x128px groß ist. Die Datei besitzt keinen Header und ist interleaved mit 24Bit angeordnet (RGB zu je 8 bit). Das Laden der Textur in ein Array klappt wunderbar. Aber das anschließende erstellen der Textur scheitert gnadenlos. Als FehlerMeldung erhalte ich ständig "Der Vorgang ist ungültig". Damit kann ich allerdings nicht viel anfangen. Der relevante Code sieht wie folgt aus:
Das laden der Pixeldaten aus der Datei:
Code:
AssignFile(F,basispfad +'/textures/1d_noon.raw');
Reset(F,1);
BlockRead(F, PixelData,Sizeof(T24Bit)*128);
CloseFile(F);
Dort gibts auch kein Problem, lasse ich mir die Farbwerte als Text ausgeben, sehen die Werte vernünftig aus. (100%ig)
Die Textur erstelle ich anschließend folgendermaßen:
wie man sehen kann nicht sehr viel Code an dem man was falsch machen kann. Die einzigen bedenken die ich habe sind die vorletzten beiden Parameter, bei denen ich mir nicht sicher bin was ich dort verwenden muss. Es handelt sich immerhin um 3*8bit, es kann ja nicht so viel geben was da in Frage kommt. Das Array und T24Bit erstell ich übrigens folgender Maßen:
Code:
T24Bit =packedrecord
r,g,b:byte;
end;
PixelData :array[0..127]of T24Bit;
Edit: Ich habs herraußgefunden! Ich habe beim Erstellen der 1D-Textur keine Mipmaps erzeugt, der Min-Filter ist aber auf Mip-Maps eingestellt. Ich habe ihn jetzt einfach auf Gl_Linear eingestellt. Das reicht für mein Vorhaben.
Registriert: Fr Jan 04, 2008 21:29 Beiträge: 419 Wohnort: Lübeck
Soo meine spielereien waren erfolgreich. Deshalb gibts jetzt hier mal ein Bild, das ich mithilfe der 1D-Texturen erzeugt habe. Nichts besonderes, aber ich finde es trotzdem schon sehr gut geeignet für einfachere Grafiksysteme, die trotzdem schnell und hübsch sein sollen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
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.