Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Nein.
Du hast dann auf der Textureinheit, auf der du die CubeMap-Aktiviert hast, anstatt den bei 2D-Texturen üblichen 2 Koordinaten drei zur verfügung. Wenn du willst, dass die Texturkoordinaten automatisch generiert werden, musst du das OpenGL mit glTexEnv beibringen. Eine CubeMap ist auch eine Textur wie jede andere auch. Naja fast
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: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Jedes Mal wenn du ein Objekt zeichnest, wird es in den Framebuffer gezeichnet bzw. gerechnet, je nachdem wie du grade blendest. Dabei hat das, was du zum Zeitpunkt des Zeichnen tust, rein gar nix mit dem was davor passiert ist zu tun.
Sprich:
Code:
ActivateCubemap;
CubemapTex.Bind;
DrawObject;
DeactivateCubemap;
glEnable(GL_BLEND);
glBlendEquation(...);
glBlendFunc(...,...);
BlendTextur.Bind;
DrawObjectManuelleTexturCoords;
glDisable(GL_BLEND);
Oder natürlich:
Code:
Textur.Bind;
DrawObjectManuelleTexturCoords;
glEnable(GL_BLEND);
glBlendEquation(...);
glBlendFunc(...,...);
ActivateCubemap;
CubemapTex.Bind;
DrawObject;
DeactivateCubemap;
glDisable(GL_BLEND);
Was mich an selbigem Tut stört: Jemand könnte mal kurz hingehen und alle _ARB-Versionen abändern. Natürlich steht es noch im Header - aber nicht mehr in den aktuellen OpenGL-Specs. (PS: Der gleiche Fall beim glSlang-Tut und den Wikiseiten dort)
MfG
Zuletzt geändert von WhiteHunter am Di Okt 30, 2007 16:37, insgesamt 1-mal geändert.
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
Entweder enthält deine Textur ein Alpha oder du übergibst eins per glColor4f(r,g,b,a).
glBlendFunc(A, B) berechnet:
BufNeu = A*TexturWert + B*BufAlt
Mit den passenden Werten, die man sich raussuchen muss, zb. dort: glBlendFunc kann man dann die Übernahme einer Art vom Alpha abhängig machen.
glBlendEquation hilft in deinem Fall wahrscheinlich nicht weiter.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
elektrokrach hat geschrieben:
Ich suche nach einer Lösung, wo die Texturen alpha 1 enthalten. Oder muss ich die Cubemap nachträglich manipulieren um irgendein alpha < 1 reinzukriegen? Dann kann ich FBOs ja vergessen.
Wenn man eine Textur verwendet und bei glColor werte < 1 verwendet, werden die Texel der Textur beim Rendern mit diesen Werten multipliziert. Du kannst also mit glColor4f(1.0, 1.0, 1.0, 0.2) das Alpha verwenden. Und wo liegt das problem mit FBOs? Das einzige, was FBOs afaik nicht können, ist Antialiasing.
Achja: Mit den richtigen Einstellungen müsste es sogar in einem Renderpass gehen, mit Multitexturing. Aber ich komm gerade nicht drauf, welche Funktion dafür sorgt, dass die Texturen addiert anstatt multipliziert werden.
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
Also ich habe gerade ein bisschen rumgespielt und folgendes hinbekommen. Es ist NICHT ganz das was man erwarten sollte aber kommt dem schon relativ nahe. Aber erst mal der Code dann beschreibe ich ein bisschen was.
Wichtig dabei ist die Reihenfolge und, dass die CubeMap als erstes aufgetragen wird. Die Fläche muss außerdem weiß sein, denn die Cubemap wird mit der Farbe und einer gesetzten Farbe verrechnet. Allerdings das Blend invertiert die CubeMap wegwegen ich die Texturen vorher invertieren musste. Und dadurch, dass die eigentliche Textur moduliert wird "spiegeln" Schwarze Flächen gar nichts. Aber eben die würden normal am meisten Spiegeln. Also von daher ist das Ergebniss mit dem Doppelt zeichnen derzeit noch das was ein richtiges Ergebniss liefert. Allerdings bin ich mir auch sicher, dass es irgendwie gehen muss.
Es gibt auch noch eine Extension GL_ARB_texture_env_combine. Mit der kann man einiges mehr machen. Mit Shadern sowieso.
Registriert: Mo Sep 02, 2002 15:41 Beiträge: 867 Wohnort: nahe Stuttgart
elektrokrach hat geschrieben:
Woher sollen die Texturen ein Alpha enthalten? Sie tun es nicht, weder die Cubemap (oder?), noch die Basistexturen.
Du kannst doch sowohl für die Texturen für die Cubemap als auch für die Texturen für die normal zu zeichnenden Texturen einen Alphakanal laden. Der kann entweder in der (32-bit)-Datei sein, zB. PNG, PSD, TGA, DDS oder TIFF oder du fügst den Alphakanal als Extra-Schwarzweiß-Textur ein, zB. mittels Lossy's Loader: glBitmap.pas
Zitat:
Wenn man z.B. ein Auto rendert, haben die Texturen alle (bis auf die Scheiben) Alpha = 1. Also entfällt z.B. glBlendFunc (GL_SRC_ALPHA, GL_ONE_SRC_ALPHA) schon mal, wenn ich da ne Umgebungsspiegelung auf den Lack zaubern will.
Ob etwas durchsichtig ist oder nicht, hat per se rein gar nix mit dem Alphakanal zu tun. Den kannst du zwar für den Alphatest, fürs Blending oder im Shader benutzen, musst das aber nicht.
Ansonsten hätte ich es jetzt auch so wie Lossy versucht - ggf. mit glTexEnv rumprobieren, oder hätte lieber gleich nen Shader geschrieben. glSlang wird ab GF fx oder ATI R9500 unterstützt und ich schätze mal, dass jeder, der sich normalerweise solche Spiegelungen wünscht, inzwischen auch sowas oder besser im Rechner haben dürfte.
GL_INTERPOLATE ist folgendes. Arg0 * (Arg2) + Arg1 * (1-Arg2)
Also ziemlich genau das Gleiche wie die blendfunc SRC_ALPHA, ONE_MINUS_SRC_ALPHA und durch den Alpha in der Environmentfarbe kann man das blending streuern.
Mitglieder in diesem Forum: Bing [Bot] und 10 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.