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

Aktuelle Zeit: Do Jul 17, 2025 15:29

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Mai 15, 2007 13:52 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Hallo Alle mit einander,

ich habe mal wieder ein Problem.

Ich möchte Transparente Texturen Rendern.

Um dies zu machen gibt es 4 möglichkeiten.

2 davon habe ich hinbekommen und sie laufen auch wunderbar.

aber an den anderen beiden Knabbere ich schon seit gut 5 tagen und ich weis nicht was ich falsch mache.

Zur Groben Erkläreung

Ich erstelle 3 Texturen in OpenGL

2 Ganz normal und eine mit Alphakanal.

Hier die 2 Varianten die bereits gehen :

Code:
  1.  
  2.  // Variante 1
  3.  renderQuad(BackTex);
  4.  glenable(gl_Blend);
  5.  glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
  6.  renderQuad(AlphaMask);
  7.  gldisable(gl_blend);
  8.  

und
Code:
  1.  
  2.  // Variante 2
  3.  renderQuad(BackTex);
  4.  glalphafunc(gl_less, 1);
  5.  glenable(GL_alpha_test);
  6.  renderQuad(AlphaMask);
  7.  gldisable(GL_alpha_test);
  8.  


Als 3. wollte ich wie folgt rendern :

1. Rendern der Back textur
2. schreiben der Alpha werte der Alpha Textur in den Alpha Buffer
3. Rendern der 3. Textur mittels Blending

hier mein Ansatz im Code :
Code:
  1.  
  2.  glColorMask(true, true, true, true);
  3.  renderQuad(BackTex);
  4.  glColorMask(False, false, false, true);
  5.  renderQuad(AlphaMask);
  6.  glColorMask(true, true, true, true);
  7.  glenable(gl_Blend);
  8.  glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA);
  9.  renderQuad(AlphaMask);
  10.  gldisable(gl_blend);
  11.  


das Problem ist das hier nun nicht der Gewünschte Effekt eintritt.
Ich bin der Meinung das evtl der Alphabuffer gar nicht erst benutzt, bzw beschrieben wird.

Ich initialisiere zwar mit

Code:
  1.  
  2.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 0, 0, 0, 0, 0);
  3.   ActivateRenderingContext(DC, RC);
  4.  


Aber anscheinend soll das kein Garant dafür sein das ich nachher auch 8 Bit für den Alpha wert habe.

die 4. Variante wäre übrrigens mittels Stencil Buffer. Diese Variante ist mir ebenfalls noch nicht gelungen
funktioniert aber genau gleich wie die noch nicht geht.

Habe euch anbei noch meinen Kompletten Code hochgeladen, falls ich vergessen habe einen evtl wichtigen Punkt zu posten.

Wäre echt cool wenn mir jemand helfen könnte.

Vor allem der Frage wegen ob ich nun wirklich einen Alpha Buffer habe oder nicht.

grüßle Corpsman

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 15, 2007 14:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Prinzipiell sollte es genügen, wenn du 32 Bit auswählst. ABER wenn im System 24 oder 16 Bit Farbtiefe aufgewählt wurden (oder per Vollbildmodus) dann gehst du leer aus. Und zwar ohne, dass du davon etwas mitbekommst. Auf älteren Systeme kann es sogar passieren, dass das gar nicht unterstützt wird. Außerdem ist es mitunter nicht sonderlich schnell, wenn du aus dem Framebuffer liest.

Ich weiß ja nicht genau was du damit bezweckst, Aber eine zusätzliche Alternative ist womöglich Multitexturing. Dort wird die Alphatextur gleich mit der RGB Textur verrechnet und das Ergebniss wird in den Framebuffer geschrieben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 15, 2007 15:05 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
also bezwecken will ich eigentlich gar nichts damit.

Ich will nur das es läuft in der praxis würde ich auf alle Fälle
Code:
  1.  
  2. // Variante 1
  3.  
  4. renderQuad(BackTex);
  5. glEnable(gl_Blend);
  6. glBlendFunc(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA);
  7. renderQuad(AlphaMask);
  8. gldisable(gl_blend);


nehmen.

Mich wundert halt nur das es net Geht , obwohl es gehen müste.

Und ich habe hier eine GForce 8800 GTS mit 32 Bit Farbtiefe, die sollte das eigentlich schon können.

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.008s | 16 Queries | GZIP : On ]