Registriert: Sa Jan 01, 2005 17:11 Beiträge: 2067
Programmiersprache: C++
rswhite hat geschrieben:
Ich wüsste nicht, wie ich anderes Rendern sollte. Ich Rendere ja nur die Daten die ich den Buffer übertragen habe. Wenn ich sie "reversed" in den Buffer übertrage, bekomme ich dieses Bild, sprich der Untergrund überlagert die Layer weiter oben: http://s14.directupload.net/file/d/2900 ... 5z_png.htm
So langsam weiß ich echt nicht mehr weiter. -.-
Doofe Frage, aber stimmen deine Z-Werte? Da der Untergrund einen niedrigeren Z-Wert haben sollte, als der Rest, sollte das Umdrehen der Reihenfolge nichts daran ändern, dass der Untergrund das letzte Element der Ebene ist. Die Reihenfolge ist nur beim Blending bzw. Alphatest wichtig.
Registriert: Di Dez 13, 2011 19:14 Beiträge: 166 Wohnort: Hamburg / Mölln
Programmiersprache: D
Ich wüsste nicht, dass ich ihn je aktiviert hätte und soweit ich weiß, ist er ja per default eh deaktiviert, nicht? Z Koordinaten benutze ich in diesem Sinne keine, der default Z wert bei der Vertex Struktur ist 0.0.
Registriert: Di Dez 13, 2011 19:14 Beiträge: 166 Wohnort: Hamburg / Mölln
Programmiersprache: D
Also soweit ich das bis hierhin identifizieren konnte, liegt es eindeutig daran, dass die SDL die ausgeschnittenen Tiles/SubSurfaces auf einen schwarzen Hintergrund "klebt". Diesen bekomme ich bisher auch nicht per SDL weg. Die einzige Variante eine Farbe Transparent zu machen ist ja genau das, was ich mit "CreateMaskFromcolor" bereits mache, oder? Ich hab mittlerweile wirklich keine einzige Idee mehr. Und ich bin noch verwirrter über den Einsatz von glBlendFunc und glAlphafunc als ich es vorher war.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Nochmal meine Frage. Hast du GL_BLEND aktiv, bzw. in deinem Fall den BlendMode auf nicht None gesetzt? Ich würde empfehlen testweise mal auf Add zu stellen, das sollte sich stark zeigen, wenn's funktionert. Oder Multiply. Irgendwas, was sich erstmal nicht auf den Alphakanal verlässt. Einfach um zu sehen, dass Blending an sich aktiv ist und funktioniert (daran habe ich nämlich noch zweifel).
grüße
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Di Dez 13, 2011 19:14 Beiträge: 166 Wohnort: Hamburg / Mölln
Programmiersprache: D
Mit Multiply erhalte ich dieses Bild: http://s14.directupload.net/file/d/2902 ... k3_png.htm Mit Add und Alpha ist das komplette Fenster weiß. Da die Textur nur gebunden und nicht gezeichnet wird, ich aber das Blending nur innerhalb der Render Methode der Textur habe, war ich gerade etwas verwirrt. Aber ja, Blending ist an und klappt, nur bringt es eben nicht den gewünschten Effekt.
edit: Wenn ich unter dem Blend Befehl noch "glColor4f(0, 0, 0, 0);" setze, ändert sich bei Multiply, dass nun der gesamte Bildschirm schwarz ist. Bei allen anderen ändert sich dadurch nichts - sprich der Bildschirm bleibt weiß.
Hast du glColor4f(1, 1, 1, 1) probiert? Die Textur wird nämlich mit dem Wert von glColor multipliziert, wenn also da der Alpha-Wert 0 wäre würde es die Probleme erklären.
Eig. passiert das Blenden in der Textur Methode "Render". Da wir hier aber nur die Textur binden, mache ich das Blenden jetzt sozusagen manuell. Das ist das Ergebnis von oberen Code: http://s7.directupload.net/file/d/2906/2zjycmf4_png.htm
Noch eine Idee? Oder ist meine glBlendFunc falsch? Mit den 3 auskommentierten glBlendfunc's ist der Bildschirm, je nach Farbe, entweder komplett schwarz oder komplett weiß.
Registriert: Di Dez 13, 2011 19:14 Beiträge: 166 Wohnort: Hamburg / Mölln
Programmiersprache: D
Ich hab mir mal das Bild, nachdem es geladen wurde, auch direkt wieder unter einem anderen Namen gespeichert. Es scheint so, als würde die Transparenz, die bei dem original weiß dargestellt wird, in SDL als schwarz übernommen werden. Weiß jemand wieso und wie man das korrigiert? Ich nutze die SDL 2.0 und habe es schon mit SDL_SetColorMod, SDL_SetAlphaMod und SDL_SetBlendMode probiert, jedoch passierte entweder gar nichts oder das gesamte Fenster war wieder komplett schwarz. Eventuell habe ich sie aber auch nur falsch benutzt, bin, wie gesagt, was Blending angeht absoluter anfänger und hoffe auf eure Hilfe. :/
Registriert: Di Dez 13, 2011 19:14 Beiträge: 166 Wohnort: Hamburg / Mölln
Programmiersprache: D
Habe das obige Problem erstmal lösen können. Dennoch, sobald ich in meiner Map Tiles verwende, die teilweise transparent sind bzw. sein sollen, werden diese später schwarz umrandet. Sprich der schwarze Rand überdeckt die darunter liegenden Tiles. Hier ist das mal gut zu sehen: http://s1.directupload.net/file/d/2906/vb58zq3f_png.htm Die beiden "Tunnel" sind Tiles auf einem neuen Layer. Und eig. sind sie transparent überrandet. In Tiled klappt das auch problemlos. Nur halt beim blitten kommen Probleme.
Ich hatte nun die Idee, dass ich gucke, ob an der Stelle an der ich nun blitte bereits Tiles sind. Wenn ja wende ich dort Blending an, wie es hier beschrieben ist: http://wiki.delphigl.com/index.php/Tuto ... r_Alles.21 Dann müssten ja die darunter liegenden Tiles durch schimmern, oder nicht? Ich wollte lieber vorher fragen, ob die Idee Sinn macht, bevor ich mich daran mache. Weil eig. habe ich ja nur eine SDL Surface von der ich mir später nur die Pixel hole.
edit: Ich frage mich grad, ob das nicht ohnehin schon so sein müsste, dass die darunterliegenden Tiles durch Blending durchschimmern müssten. Liegt es evtl. daran, dass ich einen VBO verwende?
Registriert: Di Dez 13, 2011 19:14 Beiträge: 166 Wohnort: Hamburg / Mölln
Programmiersprache: D
Dank der Hilfe eines anderen Forums habe ich es nun beinahe geschafft. Nachdem abändern der Subsurface Funktion (mit der ich die Tiles ausschneide) von
Code:
Surface SubSurface(const Rect rect =null)const{
if(rect isnull){
returnthis.GetCopy();
}
Surface copy =new Surface();
copy.Create(rect.Width, rect.Height,32);
assert(copy.CountBits()==32);
copy.Blit(this,null, rect);
return copy;
}
in
Code:
Surface SubSurface(const Rect rect =null)const{
if(rect isnull){
returnthis.GetCopy();
}
Surface copy =new Surface();
copy.Create(rect.Width, rect.Height,32);
assert(copy.CountBits()==32);
copy.Fill(Color.White);// <-- auffüllen mit weiß statt schwarz, wie es automatisch geschieht.
copy.Blit(this,null, rect);
return copy;
}
Und dem hinzufügen der Blend Funktion
Code:
glBlendFunc(GL_SRC_ALPHA, GL_SRC_COLOR);
Bekomme ich nun schon einmal dieses Bild: http://s1.directupload.net/file/d/2907/yjf5tfj3_png.htm Also schon fast das, was ich möchte, die schwarzen Rändern sind weg. Jedoch schimmern jetzt wirklich alle unteren Tiles durch, wie man besonders bei dem roten Weg (was eine Blutbahn darstellen soll) sieht, da dort an den Rändern die darunter liegenden Tiles etwas sichtbar sind. Inwiefern muss ich die Blending Funktion abändern, damit die schwarzen Ränder weg bleiben, aber ich dennoch nicht einen derartigen Durchschein Effekt habe?
Inwiefern muss ich die Blending Funktion abändern, damit die schwarzen Ränder weg bleiben, aber ich dennoch nicht einen derartigen Durchschein Effekt habe?
Mitglieder in diesem Forum: 0 Mitglieder und 8 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.