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

Aktuelle Zeit: Fr Jul 18, 2025 23:00

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Sep 17, 2006 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 01, 2006 08:22
Beiträge: 26
Wohnort: Frauenfeld / CH
Hallo zusammen,
wie schon aus dem Titel ersichtlich möchte ich eine Textur erst a la Renderpass-Tutorial zusammenstellen, eine Alpha-Maske rüberlegen und dann benutzten. Leider kriege ichs nicht auf die Reihe dass eine automatisch generierte Textur überhaupt Transparenz enthält.
Hier mal die gekürzte Version. Ich würde erwarten, dass sie ganz Transparent ist, was überhaupt nicht der Fall ist. Ändern der Werte von glClearColor bringt eine Farbänderung, aber keine Transparenzänderung.

Code:
  1.  
  2. Function RenderAlpha:Integer;
  3.   glGetIntegerv( GL_VIEWPORT, @viewport );
  4.  
  5.   glDisable(GL_DEPTH_TEST);
  6.   glMatrixMode(GL_PROJECTION);
  7.   glLoadIdentity;
  8.   glViewport( 0, 0, 32, 32 );
  9.   glOrtho( 0, 32, 0, 32, -1, 1 );
  10.   glMatrixMode( GL_MODELVIEW );
  11.  
  12.   glClearColor( 0, 0, 0, 0 );
  13.   glClear( GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );
  14.   glLoadIdentity;
  15.  
  16.  
  17.   glGenTextures( 1, @Result );
  18.   glBindTexture( GL_TEXTURE_2D, Result );
  19.   glCopyTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 32, 32, 0 );
  20.  
  21.   glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
  22.   glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
  23.  
  24.  
  25.   glViewport( viewport[0], viewport[1], viewport[2], viewport[3] );
  26. end;
  27.  


Die verwendung:

Code:
  1.  
  2.   ...
  3.   glEnable( GL_BLEND );
  4.   glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
  5.  
  6.     glBindTexture( GL_TEXTURE_2D, Texture );
  7.       glBegin( GL_QUADS );
  8.         glTexCoord2d( 1, 0 ); glVertex2d(  1, -1 );
  9.         glTexCoord2d( 0, 0 ); glVertex2d( -1, -1 );
  10.         glTexCoord2d( 0, 1 ); glVertex2d( -1,  1 );
  11.         glTexCoord2d( 1, 1 ); glVertex2d(  1,  1 );
  12.       glEnd;
  13.   ...
  14.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 17, 2006 17:32 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Der Abschnitt, wo Du deine dynamische Textur generierst, wäre am interessantesten ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 17, 2006 17:37 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 01, 2006 08:22
Beiträge: 26
Wohnort: Frauenfeld / CH
Das passiert zwischen Zeile 15 und 16 ;-)
Nein, ich habs weggelassen weil ich der Meinung bin, dass die Funktion RenderAlpha eine komplett Transparente Textur erzeugen sollte. Doch die erzeugte Textur ist komplett schwarz, nicht die kleinste Spur von Transparenz.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 17, 2006 20:12 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Es muss ich der korrekte alpha wert geschrieben werden. Wie sich dort glCopyTexImage2D verhällt kannich nicht sagen., da ich in solchen Fällen eher FBOs und Shader einsetze.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 17, 2006 21:14 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Ich wollt nicht wissen, wo Du versuchst es in die Textur zu schieben, sondern wo Du den Speicher für diesen reservierst. Wenn Du die Reservierung nämlich via Copy&Paste aus meinem Tutorial übernommen hast, dann wird nämlich evtl. kein Speicher für den Alpha-Kanal eingeholt.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 17, 2006 21:55 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 01, 2006 08:22
Beiträge: 26
Wohnort: Frauenfeld / CH
Platz ist eigentlich vorhanden. Aber, hier die Funktionen:
Erstellen
Code:
  1.  
  2. procedure CreateScreenTexture( var Texture: Integer );
  3. var
  4.   pTexData: Pointer;
  5. begin
  6.   GetMem(pTexData, 32*32*4);
  7.  
  8.   glGenTextures( 1, @Texture );
  9.   glBindTexture( GL_TEXTURE_2D, Texture );
  10.  
  11.   glTexImage2D( GL_TEXTURE_2D, 0, 4, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, pTexData );
  12.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  13.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  14.  
  15.   FreeMem(pTexData);
  16. end;
  17.  


Und in der RenderAlpha Funktion:
Code:
  1.  
  2.   ...
  3.       glColor4d( 1, 1, 1, 1 );
  4.       glBindTexture( GL_TEXTURE_2D, 0 );
  5.       glBegin( GL_QUADS );
  6.         glVertex2d( 10,  0 );
  7.         glVertex2d(  0,  0 );
  8.         glVertex2d(  0, 10 );
  9.         glVertex2d( 10, 10 );
  10.       glEnd;
  11.  
  12.   glBindTexture( GL_TEXTURE_2D, Texture );
  13.   glCopyTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, 32, 32, 0 );
  14.  


Kann der Hintergrund überhaupt Transparent sein? Wenn ich auf den Bildschirm zeichne geht das ja eigentlich nicht.

Zum Test hab ich mal mit glDrawPixels eine fortlaufende Zeichenfolge hineingeschrieben. Das ganze wieder mit glReadPixels ausgelesen und alle Alpha-Werte sin 255.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 17, 2006 22:35 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Sep 01, 2006 08:22
Beiträge: 26
Wohnort: Frauenfeld / CH
Ich hab mir eine Lösung zusammengebastelt:

1. Szene zeichnen
2. alles mit glReadPixels in einen Buffer schreiben
3. Alphakanal in den Buffer schreiben
4. mittels glTexImage2D an eine Textur binden

Geht natürlich nur wenn der Alphakanl seperat in einem Buffer vorliegt, was bei mir glücklicherweise der Fall ist.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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 | 15 Queries | GZIP : On ]