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

Aktuelle Zeit: Fr Jul 18, 2025 12:42

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



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: immer wieder Blending
BeitragVerfasst: So Jun 04, 2006 17:49 
Offline
DGL Member

Registriert: Di Jan 03, 2006 21:17
Beiträge: 8
Hallo Leute,

ich spiele mal wieder mit OpenGl, es soll ein billiges Ballerspiel werden. Aber wahrscheinlich wirds eher bald eine ProgrammLeiche ;-)

Folgendes Problem. Die Schüsse sollen aussehen wie leuchtende "Energiebatzen". Dazu will ich Alphamasking benutzen. Ich habe das Bild in GIMP hergestellt, der Alphakanal ist da wo ich das Bild nicht sehen will schwarz und da wo ich es sehen will weiss.
Das Objekt mit der Textur, die teilweise durchsichtig werden soll wird als letztes Gemalt
Jetzt ist das Problem, dass der scheinbar nicht das Alpha aus der Textur zum Blenden Benutzt sondern das der Farbe!

Also wenn ich
Code:
  1.  glColor4f(1,1,1,0.5);
  2.         glPushMatrix();
  3.         glTranslatef(particles[i].position.x, particles[i].position.y, particles[i].position.z);
  4.         glEnable(GL_BLEND);
  5.         glBlendFunc(GL_ONE,GL_ONE_MINUS_SRC_ALPHA);
  6.         glEnable( GL_TEXTURE_2D );
  7.         glBindTexture(GL_TEXTURE_2D, particles[i].thing);
  8.         glEnable(GL_ALPHA_TEST);
  9.         glAlphaFunc(GL_GREATER, 0.1);
  10.         glBegin ( GL_QUADS );  
  11.             glTexCoord2f(0, 0); glVertex3f  (0,  1, 0);
  12.             glTexCoord2f(0, 1); glVertex3f  (0,  1, 2);
  13.             glTexCoord2f(1, 1); glVertex3f  (2, 1, 2);
  14.             glTexCoord2f(1, 0); glVertex3f  (2, 1, 0);
  15.            
  16.             glTexCoord2f(0, 0); glVertex3f  (1,  2, 0);
  17.             glTexCoord2f(0, 1); glVertex3f  (1,  2, 2);
  18.             glTexCoord2f(1, 1); glVertex3f  (1, 0, 2);
  19.             glTexCoord2f(1, 0); glVertex3f  (1, 0, 0);  
  20.            
  21.             glTexCoord2f(0, 0); glVertex3f  (0,  2, 1);
  22.             glTexCoord2f(0, 1); glVertex3f  (2,  2, 1);
  23.             glTexCoord2f(1, 1); glVertex3f  (2, 0, 1);
  24.             glTexCoord2f(1, 0); glVertex3f  (0, 0, 1);
  25.         glEnd();


mache wird das ganze Objekt zur Hälfte durchsichtig.

wenn ich den glColor4-aufruf weglasse wird es garnicht durchsichtig, die Bereiche, die durchsichtig sein sollten sind immer gelb!

Das bild ist im Attachment, es wird mir immer ordentlich als durchsichtig angezeigt (in GIMP oder so)

edit :

vielleicht sollte ich sagen, wie ich die Textur lade, ich benutze dazu sdl_image :

Code:
  1.  
  2.     SDL_Surface *temp;   
  3.  
  4.     if ( (temp = IMG_Load(filename)) ) {
  5.        
  6.     //Check that the image is square (width equal to height)
  7.     //Check that the image's width is valid and then check that the image's width is a power of 2
  8.    
  9.     glGenTextures(1, number);
  10.         glBindTexture(GL_TEXTURE_2D, *number);
  11.  
  12.         glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  13.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  14.         glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  15.  
  16.     glTexImage2D(GL_TEXTURE_2D, 0, 3, temp->w, temp->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, temp->pixels);
  17.  
  18.     } else     return 1;  
  19.  
  20.  
  21.  

aber ich vermute, dass der Fehler woanders liegt weil im Prinzip das Bild ja richtig gezeigt wird...blos der Alphakanal scheint keine Beachtung zu finden,

nochmal kurz und knapp:

ich lade ein Bild und wenn ich Blending anmache wird nicht mit dem Alphawert des BIldes sondern mit dem, den ich mit glColor angebe gerechnet!

/edit

wär toll wenn mir jemand helfen könnte!
Danke im Vorraus, Martin[/code]


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 04, 2006 22:27 
Offline
DGL Member

Registriert: Di Jan 03, 2006 21:17
Beiträge: 8
ach ja...wenn ein png an einer Stelle durchsichtig ist heisst das also nicht, dass es auch einen Alphakanal hat!

jedenfalls zeigt mir Photoshop keinen an...obwohl ich in GIMP einen angelegt hab! jetz dacht ich mir sch**ss drauf, machste halt im Photoshop n Alphakanal, aber aus igendwelchen Gründen muss Photoshop PNGs "als Kopie" speichern und kann deswegen den Alphakanal nicht mitspeichern...da könnte es mir auch gleich von Grünen Männlein erzählen was soll das denn?

weiss jemand entweder wie man in Gimp einen echten alphakanal macht oder wie man Photoshop überredet einen zu speichern


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 04, 2006 23:36 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Das mit "als Kopie speichern" hat mit Alphakanälen nix zu tun. Das heißt nur, dass der Name immer noch ein "Kopie von" enthält.

Ich hatte auch mal probleme mit PNGs und Alphakanälen. Am besten du verwendest TGAs. Die sind problemfrei.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 05, 2006 04:55 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Wenn du bei
glTexImage2D(GL_TEXTURE_2D, 0, 3, temp->w, temp->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, temp->pixels);
Als "internalformat" 3 (entspricht RGB) angibst ists klar dass du keine Alphawerte erhältst. Versuchs mal mit
glTexImage2D(GL_TEXTURE_2D, 0, 4, temp->w, temp->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, temp->pixels);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 05, 2006 08:10 
Offline
DGL Member

Registriert: Di Jan 03, 2006 21:17
Beiträge: 8
ja! du hast recht! das war der Fehler!

ehrlich gesagt wusste ich garnicht, was dieser Parameter macht...ich hatte ihn blos aus dem Tutorial kopiert! :oops: sollte ich mir abgewöhnen! :idea:

vielen Dank! Martin


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 05, 2006 11:27 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
die internen formate 1-4 werden afaik eigentlich auch nur für rückwärtskompatibilität zu den ersten ogl versionen unterstützt. besser wäre es wohl auch zur besseren lesbarkeit dort auch GL_RGBA einzusetzen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 05, 2006 13:11 
Offline
DGL Member

Registriert: So Sep 26, 2004 05:57
Beiträge: 190
Wohnort: Linz
Da geht es nicht nur um Abwärtskompatibilität. Es sollte natürlich nicht jede Textur RGBA besitzen, weil das wär ein bisschen Speicherverschwendung, desshalb muss es ein internes Format geben. Und es gibt auch einige Anwendungsfälle wo das interne Format von dem abweicht was man gerne angeben möchte. Beispielsweise für eine einfärbige Schrift kannst du nur den Alphakanal angeben und intern dennoch eine RGBA Textur benötigen ... oder aber eine Rot-Alpha.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jun 05, 2006 15:17 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
dafür gibt es dann aber andere internalformats wie GL_RGB etc. was ich sagen wollte ist, dass es zugunsten der lesbarkeit vermutlich besser ist die jeweils passende konstante (mit Namen) zu verwenden, als mit zahlen um sich zu schmeißen.
und da sich für 1-4 jeweils ein passendes format findet, geht es da schon eigentlich nur um abwärtskompatibitlität.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: immer wieder Blending
BeitragVerfasst: Mo Jun 05, 2006 15:41 
Offline
DGL Member

Registriert: Sa Jun 03, 2006 17:21
Beiträge: 7
katz0r hat geschrieben:
ich lade ein Bild und wenn ich Blending anmache wird nicht mit dem Alphawert des BIldes sondern mit dem, den ich mit glColor angebe gerechnet!
du weißt aber schon, daß wenn du glColor verwendest, die RGBA-Farbe deiner Textur immer mit der in glColor angegebenen Farbe kombiniert wird? Das gilt selbstverständlich auch für den Alphakanal. Hat ein Texel deiner Textur den Alphawert x, und hast du mit glColor den Alphawet y angegeben, bekommt die dem Texel zugehörige Teilfläche deines Polygons den Alphawert x*y. Das kannst du z.B. benutzen, um einer Textur, die du nur im RGB-Format vorliegen hast, dennoch einen Transparenzeffekt zu verleihen.
Wenn der Alphawert allein durch die Textur bestimmt sein soll, mußt du in glColor den Alphawert 1 angeben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: immer wieder Blending
BeitragVerfasst: Mo Jun 05, 2006 22:07 
Offline
DGL Member

Registriert: Di Jan 03, 2006 21:17
Beiträge: 8
Vedek Bareil hat geschrieben:
katz0r hat geschrieben:
ich lade ein Bild und wenn ich Blending anmache wird nicht mit dem Alphawert des BIldes sondern mit dem, den ich mit glColor angebe gerechnet!
du weißt aber schon, daß wenn du glColor verwendest, die RGBA-Farbe deiner Textur immer mit der in glColor angegebenen Farbe kombiniert wird? [...]


Ja, inzwischen ;-) Ich habe jetzt glDisable (GL_COLOR_MATERIAL); getan...dann gelten nur texturen oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 10, 2006 15:42 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
mach doch
Code:
  1. glColor4f(1.0, 1.0, 1.0, 1.0);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 11, 2006 17:39 
Offline
DGL Member

Registriert: Di Jan 03, 2006 21:17
Beiträge: 8
Seth hat geschrieben:
mach doch
Code:
  1. glColor4f(1.0, 1.0, 1.0, 1.0);


danke, aber das ist nicht das passende...dann wird ja das ganze ding durchsichtig...ich will die Durchsichtigkeit ja nur stellenweise abhängig von der Textur...

Mein Problem wurde aber weiter oben schon gelöst

cya, Martin


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 14 Queries | GZIP : On ]