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

Aktuelle Zeit: So Mai 19, 2024 13:52

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



Ein neues Thema erstellen Auf das Thema antworten  [ 45 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3
Autor Nachricht
BeitragVerfasst: Fr Mai 25, 2012 10:36 
Offline
Ernährungsberater
Benutzeravatar

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.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 25, 2012 10:41 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Hm, wie überprüfe ich das und wie könnte ich das ändern? Durch den Tiefentest?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 25, 2012 11:50 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Was für Z-Werte setzt du denn?
Benutzt du überhaupt den Tiefentest oder hast du ihn deaktiviert?

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 25, 2012 12:06 
Offline
DGL Member

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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 25, 2012 12:52 
Offline
DGL Member

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.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 25, 2012 20:40 
Offline
DGL Member
Benutzeravatar

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 networkmy 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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mai 25, 2012 23:03 
Offline
DGL Member

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ß.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mai 29, 2012 18:01 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Hm, keiner mehr eine Idee? :/


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mai 29, 2012 18:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mai 30, 2012 10:43 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Ich habe folgende Kombinationen durch:

Code:
  1.  
  2. glCheck(glBlendFunc(GL_DST_COLOR, GL_ZERO));
  3. //glColor4f(0, 0, 0, 0);
  4. //glColor4f(1, 1, 1, 1);
  5. //glColor4f(0, 0, 0, 1);
  6. glColor4f(1, 1, 1, 0);
  7.  


Mein ganzer Code der Methode "Draw" sieht bisher so aus:
Code:
  1.  
  2. /**
  3. *
  4. */
  5. void Draw(const Window wnd) {
  6.     // wenn update
  7.     if (this._need_update) {
  8.         this._BufferMap(wnd.GetWidth(), wnd.GetHeight());
  9.  
  10.         this._need_update = false;
  11.     }
  12.  
  13.     if (!glIsEnabled(GL_BLEND)) {
  14.         glEnable(GL_BLEND);
  15.     }
  16.  
  17.    
  18.     //glCheck(glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA)); // alles schwarz
  19.     //glCheck(glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
  20.     //glCheck(glBlendFunc(GL_SRC_ALPHA, GL_ONE));
  21.     glCheck(glBlendFunc(GL_DST_COLOR, GL_ZERO));
  22.     //glColor4f(0, 0, 0, 0); // ganzer Bildschirm ist schwarz
  23.     //glColor4f(1, 1, 1, 1); // das gleiche wie (1, 1, 1, 0)
  24.     //glColor4f(0, 0, 0, 1); // ganzer Bildschirm ist schwarz
  25.     glColor4f(1, 1, 1, 0);
  26.  
  27.     // zeichnen der map
  28.     this._tex.Bind();
  29.  
  30.     //this._buffer[0].PointerTo(Buffer.PtrType.Vertex);
  31.     this._buffer.DrawArrays(Shape.Type.Triangle);
  32.     //b.DrawElements(Shape.Type.Quad, [0, 1, 2, 3]);
  33.     //this._buffer.DrawRangeElements(Shape.Type.Quad, [0, 1, 2, 3]);
  34.    
  35.     //this._buffer[1].PointerTo(Buffer.PtrType.TexCoord);
  36.     //this._buffer[1].DrawArrays(Shape.Type.Quads);
  37.    
  38.     this._buffer.Unbind();
  39. }
  40.  


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ß.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mai 30, 2012 15:09 
Offline
DGL Member

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. :/

Hier mal die Bilder:
Das originale Bild: http://dl.dropbox.com/u/20842895/before
Das Bild nachdem es geladen wurde: http://dl.dropbox.com/u/20842895/after


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mai 30, 2012 17:04 
Offline
DGL Member

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?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 31, 2012 19:45 
Offline
DGL Member

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:
  1.  
  2. Surface SubSurface(const Rect rect = null) const {
  3.     if (rect is null) {
  4.         return this.GetCopy();
  5.     }
  6.  
  7.     Surface copy = new Surface();
  8.     copy.Create(rect.Width, rect.Height, 32);
  9.  
  10.     assert(copy.CountBits() == 32);
  11.  
  12.     copy.Blit(this, null, rect);
  13.  
  14.     return copy;
  15. }
  16.  

in
Code:
  1.  
  2. Surface SubSurface(const Rect rect = null) const {
  3.     if (rect is null) {
  4.         return this.GetCopy();
  5.     }
  6.  
  7.     Surface copy = new Surface();
  8.     copy.Create(rect.Width, rect.Height, 32);
  9.  
  10.     assert(copy.CountBits() == 32);
  11.  
  12.     copy.Fill(Color.White); // <-- auffüllen mit weiß statt schwarz, wie es automatisch geschieht.
  13.  
  14.     copy.Blit(this, null, rect);
  15.  
  16.     return copy;
  17. }
  18.  


Und dem hinzufügen der Blend Funktion
Code:
  1. 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?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 31, 2012 20:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Inwiefern muss ich die Blending Funktion abändern, damit die schwarzen Ränder weg bleiben, aber ich dennoch nicht einen derartigen Durchschein Effekt habe?

Code:
  1. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mai 31, 2012 20:36 
Offline
DGL Member

Registriert: Di Dez 13, 2011 19:14
Beiträge: 166
Wohnort: Hamburg / Mölln
Programmiersprache: D
Tut mir leid, damit ist wiederum _alles_ weiß und ich sehe gar nichts mehr von meiner TileMap.


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


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]