Registriert: Mi Aug 09, 2006 15:47 Beiträge: 44 Wohnort: St. Wendel
Programmiersprache: Delphi, C#, Java, C
Hi,
habe bis vor kurzem gar nicht gewusst, dass ich hier auch en Account habe, ihr wurdet mir von der DP empfohlen, hier soll ich die OpenGL Profis finden Daher ist hier auch ein identischer Thead... http://www.delphipraxis.net/post830562.html Meine Fragen sind für euch bestimmt sehr einfach zu beantworten^^
Bild 1 im Anhang zeigt einen Gang, Nebel ist eingeschaltet.
glClearColor hat dieselben Farben wie der Nebel bekommen
Code:
ogl.ClearColor.R:=0.3;
ogl.ClearColor.G:=0.3;
ogl.ClearColor.B:=0.3;
ogl.ClearColor.A:=0;
Sooo...müsste der vom Nebel verdeckte Gang nicht dieselbe Farbe haben wie die "Umgebung" (glClearcolor)?
Und müsste ich dann den Gang nicht erst sehn wenn ich kurz davor bin / müsste er nicht vom Nebel verdeckt sein? Ich glaube die beiden Fragen hängen zusammen.
Bild 2 zeigt einen Gang von innen. Der Boden nutzt Blending, wieso ist der Nebel da weiß?
Blendfunc ist :
Code:
glBlendFunc(GL_SRC_ALPHA,GL_ONE);
Thx
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hatte gerade mal in einem eigenen Projekt ein bisschen Nebel eingefügt und wollte gerade schreiben, dass ich mir nicht so recht erklären kann woran es liegt bis ich deine BlendFunc mit benutzt hatte und siehe da aus meinen vorher korrekten Nebel wurde überstrahlter Nebel. Denn deine Blendfunc ist Adaptiv.
Also da wird etwas so etwas gerechnet. DestColor = SourceColor * SourceAlpha + DestColor * 1. Also zur bereits existierende Farbe des FrameBuffers (DestColor = (0.3, 0.3, 0.3)) wird die Farbe des Quads (SourceColor = (0.3, 0.3, 0.3)) hinzuaddiert. Was dann unweigerlich in einem Überstrahlen enden.
Versuch mal eine BlendFunc die nicht adaptiv ist. Also glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA).
PS: Ach ja Nebel ist nicht so mein Spezialgebiet. Um ehrlich zu sein habe ich bisher eher weniger mit Nebel gemacht also besteht bei allem ein gewisses Restrisiko, dass quatsch erzähle.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich habe damit eigentlich die Frage 1 beantwortet.
Allerdings vermute ich, dass beides so ziemlich das gleiche Problem ist. Evtl solltest du mal schauen ob du, beim Zeichnen der Flächen aus Frage 1, Blending aktiviert hast. Ich bin bei meinem Versuch davon ausgegangen, dass das der Fall ist. Denn bei beiden Bildern sind vermutlich die Einstellungen gleich und das resultierende helle Grau ist auch identisch. Deswegen sagt mir mein messerscharfer Verstand *hust*, dass beim Zeichnen blending aktiv sein müsste.
Registriert: Mi Aug 09, 2006 15:47 Beiträge: 44 Wohnort: St. Wendel
Programmiersprache: Delphi, C#, Java, C
Hmm aber durch die Änderung der BlendFunc - Parameter ist der weiße Boden verschwunden -> Frage 2
Also ich habe jetzt mal Blending an/ausgemacht -> Kein Effekt
Dann hab ich den Nebel und die ClearColor mal komplett rot gemacht (1,0,0,0).
-> Die Gänge die im Nebel verschwinden sind dunkelrot, das OpenGl-"Nichts" hat aber ein schönes vitales rot...
Ich verstehs echt nicht... :-X
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Hast du mal versucht, die Alpha-Komponente vom Nebel auf 1 zu setzen?
Gruß Lord Horazont
_________________ 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: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Lord Horazont: Das hatte ich gestern auch mal kurz getestet. Und ich hatte den Eindruck der Alpha wird da komplett ignoriert. Aber ich lasse mich gerne eines Besseren belehren. Gerne nicht aber ich tue es trotzdem.
Flips: Ich muss allerdings gestehen, dass ich deinen Ausführungen gerade nicht so ganz folgen konnte. Deswegen würde ich einfach mal vorschlagen, dass du dein Projekt mal irgendwo hochlädst oder zur not mir per mail dann lad ich es hoch. Also mit quellen und allem was benötigt wird. So das wir uns das mal direkt anschauen können. Also wenn es machbar ist und da kein kommerzieller Code enthalten ist oder irgendwelche geheimen Sachen eingebaut sind.
Registriert: Mi Aug 09, 2006 15:47 Beiträge: 44 Wohnort: St. Wendel
Programmiersprache: Delphi, C#, Java, C
So, hab mal was zusammengeknaubt wo der gleiche Fehler kommt...
Die fog.pas hab ich vor Jahren mal gemacht, hat immer funktioniert.
Die OpenGlClass.pas ist ne Klasse von mir in die ich alle OpenGl-Initialisierungsdinge reingehauen hab.
Sollte soweit alles gehen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Habe mich gerade dusselig gesucht aber ich habe gefunden wo das Problem lag, denn bei mir ging es obwohl es nahezu 100%tig identisch ist. Ich habe was gut bei dir.
Aber hier des Rätsels Lösung. Wenn du einen Float Typen machst, dann musst du den auch als Float übergeben und nicht als Integer.
Code:
glFogiv(GL_FOG_COLOR,@FColor);
Also glFogiv muss zu glFogfv werden. Sonst weiß OpenGL nicht wie er die Daten zu interpretieren hat. Das es halbwegs so hin gehauen lag daran, dass Single und Integer gleich groß sind. Deswegen kam auch überhaupt eine Farbe an.
Registriert: Mi Aug 09, 2006 15:47 Beiträge: 44 Wohnort: St. Wendel
Programmiersprache: Delphi, C#, Java, C
genau das wars du bist der held vom erdbeerfeld
Ich hatte heut sogar drüber gelesen, aber ganz vergessen, dass ich ja mit Singles arbeite...tststs
So aber kaum funzt das, geht das andere (wieder) nicht oO
Code:
glEnable(GL_BLEND);
glColor4f(1,1,1,1);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
Zeigt trotzdem nur die erste Textur an. Ich glaub ich steig auf Multitexturing um...
Aber ich verstehe es echt nicht...es hat doch noch zuletzt geklappt :-X
Hab den Texturen mal via Gimp nen extra Alpha-Kanal hinzugefügt -> Hat nichts gebracht...
[EDIT] o.O hab doch nur einmal geklickt, könnt den anderen Post bitte jmd löschen?[/EDIT]
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hab eben das Doppelpost gelöscht.
Zeichnest du da an der Stelle 2 Mal die gleiche Fläche übereinander? Wenn ja, dann kann das wirklich nicht gehen. Denn damit das funktioniert muss die 2te Fläche halb transparent sein. Durch den Neben wird die Fläche aber kurz vorher mit der Nebelfarbe verrechnet. Und die Fläche ist 100% Sichtbar. Deswegen wirst du das an der Stelle nicht mehr Blenden können, da keine Alphainformationen mehr vorhanden sind. Das Beste dazu wird wirklich Multitexturing sein.
Mitglieder in diesem Forum: Google [Bot] 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.