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

Aktuelle Zeit: So Jul 20, 2025 00:20

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Frage zum Cubemap-Tutorial
BeitragVerfasst: Mo Okt 29, 2007 17:41 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
erledigt


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:31, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 13:32 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
überflüssig


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:31, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 13:49 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Genauso wie du normal blendest. Nur hast du diesmal keine einfache 2D-Textur sondern eben eine Cubemap.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 14:02 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
falsch


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:32, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 14:30 
Offline
DGL Member
Benutzeravatar

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 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  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 15:31 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
egal


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:32, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 16:29 
Offline
DGL Member
Benutzeravatar

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:
  1.  
  2.   ActivateCubemap;
  3.   CubemapTex.Bind;
  4.   DrawObject;
  5.   DeactivateCubemap;
  6.  
  7.   glEnable(GL_BLEND);
  8.   glBlendEquation(...);
  9.   glBlendFunc(..., ...);
  10.  
  11.   BlendTextur.Bind;
  12.   DrawObjectManuelleTexturCoords;
  13.   glDisable(GL_BLEND);
  14.  


Oder natürlich:
Code:
  1.  
  2.   Textur.Bind;
  3.   DrawObjectManuelleTexturCoords;
  4.  
  5.   glEnable(GL_BLEND);
  6.   glBlendEquation(...);
  7.   glBlendFunc(..., ...);
  8.  
  9.   ActivateCubemap;
  10.   CubemapTex.Bind;
  11.   DrawObject;
  12.   DeactivateCubemap;
  13.   glDisable(GL_BLEND);
  14.  


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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 16:33 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
danke


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:32, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 16:44 
Offline
DGL Member
Benutzeravatar

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.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 16:54 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
erledigt


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:32, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 18:21 
Offline
DGL Member
Benutzeravatar

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 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  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 19:44 
Offline
DGL Member
Benutzeravatar

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.
Code:
  1. const
  2.   Color: array [0..3] of single = (0.75, 0.75, 0.75, 0);
  3.  
  4. begin
  5.   glActiveTexture(GL_TEXTURE0);
  6.   glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, @Color);
  7.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND);
  8.   fCube.Bind;
  9.  
  10.   glActiveTexture(GL_TEXTURE1);
  11.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  12.   fTex.Bind;
  13.  
  14.   glBegin(GL_QUADS);
  15.     glMultiTexCoord2f(GL_TEXTURE0, 0, 1);
  16.     glMultiTexCoord2f(GL_TEXTURE1, 0, 1);
  17.     glVertex3f(- 2, - 2, 0);
  18.  
  19.     ...
  20.   glEnd;
  21.  
  22.  
  23.   glActiveTexture(GL_TEXTURE1);
  24.   fTex.Unbind;
  25.  
  26.   glActiveTexture(GL_TEXTURE0);
  27.   fCube.Unbind;


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.

http://wiki.delphigl.com/index.php/GL_ARB_texture_env_combine
http://www.opengl.org/registry/specs/ARB/texture_env_combine.txt


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 19:56 
Offline
DGL Member
Benutzeravatar

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.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 21:34 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
erledigt


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:32, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Okt 30, 2007 22:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
elektrokrach: Das ist ganz schön fies von dir solche Fragen zu stellen. :-P

Getrieben von entsprechendem Ehrgeiz habe ich es hinbekommen. Damit ist mein vorheriges Post null und nichtig.
Code:
  1. const
  2.   Color: array [0..3] of single = (0, 0, 0, 0.125);
  3. begin
  4.   glActiveTexture(GL_TEXTURE0);
  5.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  6.   fTex.Bind;
  7.  
  8.   glActiveTexture(GL_TEXTURE1);
  9.   fCube.Bind;
  10.   glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, @Color);
  11.   glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
  12.   glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
  13.   glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
  14.   glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PREVIOUS);
  15.   glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA, GL_CONSTANT);
  16.  
  17.   glBegin(GL_QUADS);
  18.     glMultiTexCoord2f(GL_TEXTURE0, 0, 1);
  19.     glMultiTexCoord2f(GL_TEXTURE1, 0, 1);
  20.     glVertex3f(- 2, - 2, 0);
  21.  
  22.     ...
  23.   glEnd;
  24.  
  25.   glActiveTexture(GL_TEXTURE1);
  26.   fCube.Unbind;
  27.  
  28.   glActiveTexture(GL_TEXTURE0);
  29.   fTex.Unbind;


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.


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


Wer ist online?

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.

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