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

Aktuelle Zeit: Di Jul 08, 2025 08:58

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Mär 28, 2004 22:17 
Offline
DGL Member

Registriert: So Mär 28, 2004 21:52
Beiträge: 2
Wohnort: NRW -> Wesel
hi,
also da ich ganz frisch bin im opengl proggen und noch bei euren tutorials häng hab ich eigentlich garkeinen plan was so abgeht...
bin jetzt beim 4. tutorial (da wo es um texturen geht) gelandet und das funktioniert wie gewohnt eigentlich recht gut - hab jetzt mal dieses GlBitmap zum laden der Texturen verwendet... geht auch super nur eins geht nicht....
und zwar wollte ich endlich transparenz da mit reinmachen... mit addalphafromcolorkey(r,g,b) aber da passiert nix, keine fehlermedung und der hintergrund der textur ist immnoch grün :( wie als wenn ich das einfach weglassen würde...
damit ihr nicht großartig rumraten müsst schreib ich hier noch das wichtigeste hin:
Code:
  1.  
  2. var Textur: TglBitmap;
  3.  
  4. procedure TMainForm.FormCreate(Sender: TObject);
  5. begin
  6.   if not InitOpenGL then
  7.   begin
  8.     MessageBeep(32);
  9.     Halt(100);
  10.   end;
  11.   Application.OnIdle := ApplicationEventsIdle;
  12.   InitGl(MainForm);
  13.   glEnable(GL_TEXTURE_2D);
  14.  
  15.   Textur:= TglBitmap2D.Create;
  16.   Textur.LoadFromFile('./texture/test.bmp');
  17.   Textur.AddAlphaFromColorKey(0,255,0);
  18.   Textur.GenTexture;
  19. end;
  20.  


gezeichnet wird später in TMainForm.ApplicationEventsIdle und ich hab vor dem viereck extra nochmal Textur.Bind; aufgerufen... aber angezeigt wirds ja...
also das muss ja nicht unbedingt am code liegen, kann ja auch sein das nix transparent wird weil sich in der szene nur ein viereck befindet (hintergrund schwarz)... aber normal is das nicht find ich (hab ich mir jedenfalls anders vorgestellt)
oder stimmt da die reihenfolge nicht? kann ja auch sein...
aber ich bin jetzt schon seit mehreren stunden am probieren und testen, langsam sinkt meine motivation ins negative :(

ach ich probier einfach mal weiter, wenn einer weiter weiss bitte mir sagen :P

cya muh

EDIT: also ich hab, wie gesagt, noch etwas rumprobiert und siehe da: ich bekomm das grüne weg :D muss nur das viereck vorher einfärben.. nur leider bekomm ich dann so nen (z.b.) rotschimmer...
kann mich da mal jemand aufklären? bitte :(


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 29, 2004 06:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Normal sollte das so auch funktionieren. Aber hast du denn überhaupt einen Alphatest oder ein Blending aktiviert?

AlphaTest für harte Kanten:
Code:
  1.   glAlphaFunc(GL_GREATER, 0.1);
  2.   glEnable(GL_ALPHA_TEST);


Blending für weiche Übergänge oder Transparenzen:
Code:
  1.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  2.   glEnable(GL_BLEND);
  3.  


Du musst eines von beiden vor dem Zeichnen deiner Fläche aktivieren. Damit OpenGL weiß, was es mit dem Alphakanal überhaupt anfangen soll. Die Farbe deiner Fläche sollte dabei weiß sein. Nach dem Zeichnen solltest du es dann wieder deaktivieren.

Allerdings ist dein Bild nicht wirklich gut für einen ColorKey und den Alphatest geeignet. Da der Sonic am Rand ins Grüne verläuft. Und Colorkey (und Alphatest) normal nur eine einzelne Farbe verwendet. Diese beiden Sachen liefern jeweils ein boolsches Ergebnis. (Entweder ja oder nein) Du solltest dir dann entweder ein Bild mit einer harten Kante besorgen oder du benutzt ein Program wie Photoshop und erstellst den Alphakanal in dem Progamm. Und zwar so, dass der am Rand verläuft. Du musst dann natürlich blending verwenden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 29, 2004 14:13 
Offline
DGL Member

Registriert: So Mär 28, 2004 21:52
Beiträge: 2
Wohnort: NRW -> Wesel
juhu danke,
alphatest hatte ich an, nur das davor nicht... wozu ist das denn genau?
und das file ist auch gut, oben das war ja der screenshot nach dem render, das verwischt es automatisch so bei mir (kA woran das liegt) und ich hab das mit paint erstellt (das grüne)... mit photoshop bekomm ich die harten kanten irgendwie nicht hin :(

naja egal, es tut (siehe screen) und ich freu mich :D nur glAlphaFunc(GL_GREATER, 0.1) hab ich noch nie gesehen... werd mich gleich mal damit auseinandersetzen

nochmal danke muh


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 29, 2004 14:25 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Mit glAphaFunc legt man den Vergleich fest der beim Fragmentest benutzt wird. Im konkreten obigen Beispiel bedeutet, das nur Fragmente gezeichnet werden deren Alphawert größer (GL_GREATER) 0,1 ist.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 29, 2004 14:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Dieser Alphatest macht ja nichts anderes als Okay das Pixel ist drin. Das auch. Oder Du kommst hir net rain! ;-)
Du musst dem natürlich auch eine Bedingung geben. Also woran er erkennt welche Pixel sichtbar sind und welche nicht. Und genau das machst du mit glAlphaFunc.

z.B.: GL_GREATER und 0.1
Damit werden alle Pixel berücksichtig deren Alphawert größer 0.1 liegt. Und bei ColorKey entsteht nur 0 und 1. Der Alphawert wird entweder aus dem AlphaKanal der Textur und oder dem Alphawert der Vertexe genommen. Also mit glColor4??


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mär 29, 2004 14:29 
Offline
DGL Member

Registriert: Di Okt 07, 2003 12:26
Beiträge: 23
Zitat:
nur glAlphaFunc(GL_GREATER, 0.1) hab ich noch nie gesehen...

Durch glEnable(GL_ALPHA_TEST) wird ja der Alpha-Test aktiviert, was ja bedeutet, das alle Pixel deren Alphawerte einem bestimmten Kriterium entsprechen gezeichnet werden, die anderen nicht. Durch das setzen der Alpha-Funktion gibst du dieses Kriterium an. In dem Fall heißt das, das aller Werte die größer als 0.1 sind gezeichnet werden.
Zitat:
oben das war ja der screenshot nach dem render, das verwischt es automatisch so bei mir (kA woran das liegt)

Das müsste eigentlich am Texturenfilter liegen. In einer 3D-Anwendung wird das Bild ja meistens gestreckt oder getaucht, und deshalb wird zwischen den Pixeln interpoliert. Wenn du das ausschaltest, dürfte es auch nicht mehr verschwimmen, dann ist es aber auch in den Vergrößerungen/Verkleinerungen sehr Pixelig.


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 » Einsteiger-Fragen


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.007s | 14 Queries | GZIP : On ]