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

Aktuelle Zeit: Mi Jul 16, 2025 01:45

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Transparente Textur
BeitragVerfasst: Fr Jun 18, 2004 10:53 
Offline
DGL Member

Registriert: Fr Jun 18, 2004 08:19
Beiträge: 14
Wollte mal vor meiner Frage nochma kurz Hallo sagen und mich vorstellen :D Bin neu hier ...

Hab schon gesucht, aber nicht keine wirkliche Antwort gefunden, vllt bin ich auch nur zu blöd zum Suchen, also don't flame me plz :D

Mein Problem ist folgendes:

Ich lade ein Bitmap in einen Buffer of DWord (RGBA) und erstelle schließlich die Textur mit glBuild2dMipMaps. Die Parameter sind GL_RGBA und GL_UNSIGNED_BYTE.

Nun möchte ich, diese Textur transparent zeichnen, d.h alle Pixel mit dem Alpha-Wert 0 sollen verschwinden und alle mit dem Alpha-Wert 255 sollen da bleiben. Habs mit Blending versucht, nur komm ich bei den Flags von glBlendFunc nicht wirklich klar. Manchmal blendet er und manchmal nicht. Problematisch ist nur, dass, wenn er blendet und die Pixel, die man nicht sehen soll rauslässt, dann erscheinen die anderen Pixel auch halbdurchsichtig und genau dies möchte ich ja vermeiden. Hab ich evtl. die Möglichkeit das ohne Blending auch über den Alpha-Test umzusetzen? Hoffe ihr versteht, was ich meine und ihr könnt mir weiter helfen ...

Dankeschön
cHicHo


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 18, 2004 11:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also das was du sucht ist genau der Alphatest. Das ist auch die einzige Aufgabe dieses Tests.

Als erstes solltest du aber sicher stellen, dass deine Textur einen Alphakanal hat. Ein Bitmap (*.bmp) beinhaltet keinen Alphakanal. Tga's können zum Beispiel einen solchen Kanal beinhalten.

Ich gehe mal davon aus, dass deine Textur richtig geladen ist. Also, dass du sie siehst.
Dann musst du lediglich folgendes machen.
Code:
  1.   glAlphaFunc(GL_GREATER, 0.1);
  2.   glEnable(GL_ALPHA_TEST);

Nach Möglichkeit nie direkt 0 nehmen, da dabei die Spanne zu klein ist. Es kann sein, dass die Bilddaten zum Biespiel durch jpg kompression minimal verändert wurden. Und dann klappt es nicht mehr.
Nach erfolgreichem Zeichen den Alphatest wieder deaktivieren und fertig.
Code:
  1.   glDisable(GL_ALPHA_TEST);


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 18, 2004 12:06 
Offline
DGL Member

Registriert: Fr Jun 18, 2004 08:19
Beiträge: 14
Danke erstmal für deine schnelle Antwort. Leider funktioniert das nicht so ganz ... daraus folgere ich mal, dass ich meine Textur nicht korrekt mit dem Alpha-Kanal lade. Die Daten mit denen ich dann letztendlich die

gluBuild2DMipmaps(GL_TEXTURE_2D, 3, Size.X, Size.Y, GL_RGBA, GL_UNSIGNED_BYTE, Buffer);

Funktion aufrufe, bezieh ich aus einer Wad-Datei. Dort lese ich aber jeden Pixel einzeln und setze für jeden Pixel den Alphawert auf 0(unsichtbar), bzw. 255(sichtbar). Trotzdem werden die Pixel mit dem Alpha-Wert 0 gezeichnet. Das ganze sieht im Code in etwa so aus

For i := 0 to Size - 1 do
begin
// Farbwert kopieren
Move(Palette[ImageData[i] * 3], Color, 4);
Color[3]:= 255;
If Color[2] = 255 then // Blau: 255 = Blendfarbe
ZeroMemory(@Color, 4);
// Farbwert in den Buffer schreiben
Move(Color, Buffer[i], 4);
end;

Buffer ist ein Array of DWord und Color ein Array[0..3] of Byte... Wenns nicht ganz klar wird, kann ich auch noch mehr Code kopieren....


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 18, 2004 13:59 
Offline
DGL Member

Registriert: Fr Jun 18, 2004 08:19
Beiträge: 14
Ich habe soeben meinen Fehler gewfunden und ich gestehe, er war wirklich dumm ... :D Ich habe der gluBuild2Mipmaps-Funktion die Komponentenanzahl 3 übergeben, also war die Textur nicht RGBA, sondern RGB :oops: Jetzt klappt alles wunderbar...

Dankeschön!


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 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.007s | 14 Queries | GZIP : On ]