Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
Moin!
Ich traue mich fast nicht, zu fragen, weil ich der Überzeugung bin, dass ich nur eine winzigkeit übersehen habe...
Also ich habe bis jetzt alle Texturen in Bitmaps gehabt, wollte aber nun auf TGA umsteigen, wegen der kompression.
Und weil der Alphakanal direkt in der Textur wäre...
Jetzt werden allerdings die Farben wirr wiedergegeben. Ich denke, dass liegt daran, dass TGA in BGR statt RGB gespeichert ist - hab ich zumindest so gelesen...
Wie bring ich es denn jetzt fertig, dass dem SDL-Programm mitzuteilen?
Oder ist es überhaupt sinnvoll, mit TGA zu arbeiten?
Achja: Versucht habe ich, im Pixelformat der Textur die Werte von RShift, GShift und BShift zu ändern - das hat die Farbwiedergabe zwar verändert, aber es wurde eher noch wirrer, als besser
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Du sagst OpenGL bei Erstellung der Textur: GL_BGRA anstatt GL_RGBA. Setzt war OpenGL 1.3 oder so voraus, sollte aber da sein. Ansonsten könntest du natürlich manuell eine Farbvertausch machen, da musst du aber Pixel schieben und nicht die Shiftwerte ändern.
aber das gibt immernoch wirre farben. mit der position der FF habe ich rumgespielt, aber da tut sich auch nur wenig...
edit:
ich hab gerade gemerkt, dass die verrückten farben an der transparenz liegen, die ich dem png in gimp verpasse, wenn ich ein png ohne transparenz nehme wird alles farbgetreu wiedergegeben... allerdings greift die transparenz in sdl nicht mehr - das ging bisher bei mir so:
SDL_SetColorKey(textur, SDL_SRCCOLORKEY, SDL_MapRGB(textur.format, 0, 0, 0));
Zuletzt geändert von doppelreim am Fr Jun 15, 2007 11:58, insgesamt 1-mal geändert.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Die Farben sind jetzt aber trotzdem noch komisch, oder? Das kann ich gerade so nicht mehr richtig raus lesen.
Aber die Farben auf dem Bild sind in der Tat seltsam. Vor allem handelt es sich dabei auch nicht nur um eine reine Kanalverwechslung. Die Farben sind so extrem intensiv. Und da kann ich mir nicht vorstellen, dass das Original auch so ist.
Du kannst ja testweise direkt nach dem Laden mal die Bilder als BMP irgendwohin speichern und schauen ob das so aussieht wie es sein sollte bzw auch mal nach den einzelnen Schritten. Also auch nach SetColorKey.
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
war ein bisschen draußen und habe essen gekauft, jetzt bin ich wieder fit
ich lade jetzt png texturen ganz normal über IMG_Load und alles funktioniert bestens.
also farben werden korrekt angezeigt, ohne dass ich mir über RGB und BGR Gedanken mache
und mit SDL_SetColorKey bekomm ich das schwarz aus dem hintergrund der textur auch transparent
die wirren farben kommen, wenn ich das png direkt in gimp transparent mache, aber dann sieht das gespeicherte bild so schon so wirr aus, da kann ja SDL nichts mehr dafür, wenn es wirre sachen wirr anzeigt.
wahrscheinlich gebe ich gimp schon wirre anweisungen für die transparenz und gimp kann dann nicht anders, als wirre farben auszugeben, die sdl dann natürlich wirr wiedergibt...
aber es gibt ja das SetColorKey von SDL, also hat es mit der wirrerei ein ende
Noch eine Frage: manche von den Tiles werfen Schatten - kann ich der "Schattenfarbe" halbe Tranparenz zuschreiben?
Ich häng das Tileset mal an...
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Ja, Transparenz ist schon lange keine Maske mehr sondern ein eigener Farbkanal. Daher kannst du Werte von 0 bis 255 zuweisen.
Die Schatten bekommen einfach 127, das Schwarze 256 und der Rest 0.
Beim Blitten in die Mainsurface sollte SDL das automatisch berücksichtigen, sogar ohne SetColorkey. Das einzige Problem damals war das die Transparents dann verloren geht. Aber an der Stelle ist es für dich ja auch wieder egal.
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
das klingt ziemlich genau nach dem, was ich suche...
aber in der sdl dokumentation finde ich nur set_alpha und das bezieht sich, soweit ich das verstanden habe, immer auf das gesamte surface...
wie setze ich denn alpha werte für einzelne farben?
Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2068
Programmiersprache: C++
Das machst du mit deinem Grafikprogramm. Meistens nur indirekt indem du die Deckkraft reduzierst. Danach lädst du die entstandene PNG einfach mit SDL und schon stimmen die Werte. Ansonsten kannst du natürlich auch die Pixel deiner Surface manuell durchgehen und bei Schwarz ohne Alpha dein Alpha auf 127 setzen, aber dies ist Schwachsinn und aufwendig.
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
ach-so ich war immer noch auf der schiene, dass das in sdl geht - sowas wie SDL_SetColorTransparency(surface, color, opacity) oder so
wunderbar, dann geh ich mal den gimp bemühen
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.