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

Aktuelle Zeit: Sa Jul 19, 2025 05:18

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texture Alphafarbe ändern
BeitragVerfasst: Fr Dez 21, 2007 14:58 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Hallo,

Ich nutze die aktuellste Version der glBitmap.pas und möchte in meinem Texturemanager die Alphafarbe einer Textur ändern, probiert habe ich es so:

Code:
  1.  
  2. procedure TTextureManager.ChangeAlpha(pTextureName: string; R, G, B: byte);
  3. var
  4.   i, p: integer;
  5. begin
  6.   for i := 0 to high(Textures) do
  7.     if (Textures[i].Name = pTexturename) then
  8.     begin
  9.       p := i;
  10.       break;
  11.     end;
  12.   with Textures[p] do
  13.   begin
  14.     Tex.AddAlphaFromColorKey(R, G, B);
  15.     Tex.GenTexture(true);
  16.   end;
  17. end;
  18.  

Leider tut sich da nicht viel. Muss ich das anders gehen ? Die Textur neuzuladen ist kein Problem, nur scheint der Alphawert unveränderlich :?

danke

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 21, 2007 16:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Du möchtest, dass eine andere Farbe in der Textur transparent wird? Bitte beachte, dass Deviation in diesem Falle null ist somit auch eine Abweichung von 1 Farbwert bereits dazu führt, dass das Pixel nicht mehr verändert wird.

Und was wohl eher das Problem sein wird. Per Default wirft die glBitmap die Texturdaten aus dem Speicher sobald sie generiert wurde. Und wenn du dann noch mal versuchst eine Textur zu generieren passiert nichts, weil keine Daten existieren. Sollte ich evtl später noch ein paar Exceptions um mich werfen. Aber ich schweife ab. Du solltest nach dem Erstellen der Instanz die Eigenschaft FreeDataAfterGenTexture auf False sein. Dann erhöht sich aber der Speicherverbrauch. Aber du kannst den Alphawert neu erzeugen lassen bzw hochladen.

Diese Eigenschaft kannst du auch Global mit der Methode glBitmapSetDefaultFreeDataAfterGenTexture setzen. Das wirkt sich aber nur auf die Texturen aus die danach erstellt werden.

PS: Allerdings ändert sich bei einem Aufruf von GenTexture womöglich die ID der Textur. Weswegen das wohl eher nicht mit DisplayListen kompatibel ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 21, 2007 19:05 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Danke, Displaylisten brauche ich nicht und das betrifft auch nur eine Textur, ich werde das mal testen ;)

€: danke funktioniert wunderbar ;)

mfg


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Dez 23, 2007 16:48 
Offline
DGL Member

Registriert: Mo Nov 06, 2006 19:15
Beiträge: 172
Hi Lossy! Muss sich die ID der Textur denn ändern? Gibt es Probleme, wenn man sie erneut verwenden möchte?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Dez 24, 2007 17:17 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Und noch einen Hinweis: Es wird wenn du filtern nich auf Nearest hast oder Mipmaps verwendest auch die per ColorKey entfernte Farbe in Randbereichen sichtbar.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 25, 2007 16:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
NerdIII: Nein. Die ID muss sich normal nicht ändern. Allerdings, wenn ich die Textur neu zuweise (glTexImage), dann muss OpenGL intern Speicherbereiche anpassen etc. Und dann ist es einfach schneller und evtl besser für den Treiber, wenn ich die Textur komplett wegschmeiße und mir eine Neue erzeuge. Wenn sich aber nur der Inhalt der Textur ändert, dann kann man einfach die Daten mittel glTexSubImage aktualisieren. Das ist dann noch schneller als sie neu zu erstellen. Und in meinem Loader kann ich das leider nicht so richtig entscheiden was da passiert. Zu mal so dynamische Texturen eher die Ausnahme damit sind. Vermute ich mal stark. Also schmeiße ich sie weg und erzeuge sie neu. Ist auch Programmtechnisch das Einfachste. ;)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 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.008s | 14 Queries | GZIP : On ]