| Autor |
Beitrag |
schneegurke
      
Beiträge: 19
Win XP
C# (VS 2003, 2005 Express)
|
Verfasst: Do 24.07.03 01:21
Ich hab gerade versucht ein isometrisches Feld mit OpenGL zu zeichnen. Vom Prinzip her wird auch alles korrekt angezeigt, nur bekomm ich die einzelnen Tiles nicht transparent. Jedes Tile ist vom Typ BMP und hat als Transparenzfarbe clFuchsia sprich in OpenGL (1, 0, 1). Hab mit Google etc. auch schon gesucht und weiss auch, dass man wohl glBlendFunc benutzen soll nur hab ich von den Parametern keine Ahnung, da gibts ja irgendwie jede Menge.
Hoffe ihr könnt mir da helfen. Den Code hab ich sicherheitshalber mal angehängt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| gx := GLX(dx); gy := GLY(dy); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Tex); glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex2f(gx, gy - GLHeight(TileHeight)); glTexCoord2f(0, 1); glVertex2f(gx, gy); glTexCoord2f(1, 1); glVertex2f(gx + GLWidth(TileWidth), gy); glTexCoord2f(1, 0); glVertex2f(gx + GLWidth(TileWidth), gy - GLHeight(TileHeight)); glEnd; |
Damit jeder weiss, was genau ich mit Transparenz meine, hier das Bild:
Die Rosa-Farbe soll sozusagen nur nicht mitgezeichnet werden.
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Do 24.07.03 01:51
Hi,
dafür mußt du AlphaMasking benutzen, denn mit normalem Blending wird das wohl nix..
Lad dir mal diese Datei runter:
www.koshigaya.de/DelphiGL/kglTextures.zip
Jetzt bindeste die Textures.pas in dein Projekt ein und lädst dein BMP:
Delphi-Quelltext 1: 2: 3: 4: 5:
| var Tex: TTextur;
procedure InitOpenGL; Tex:=TTextur.Create('c:\...\bla.bmp'); |
Als nächstes sagst du welche Farbe transparent sein soll:
Delphi-Quelltext 1:
| Tex.SetAlphaColor(R,G,B,0); |
Das war's schon mit der Vorbereitung
Wenn du jetzt dein Polygon mit der Textur zeichnen willst machst du's so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| glEnable(GL_BLEND); glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER,0.1); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
Tex.Bind; glDisable(GL_ALPHA_TEST); glDisable(GL_BLEND); |
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
Logiqu
      
Beiträge: 43
Win XP
Delphi 2006 Pro
|
Verfasst: Do 24.07.03 09:11
hi!
ich habe die variante mit
Delphi-Quelltext 1:
| Tex.SetAlphaColor(R,G,B,0); |
noch nicht ausprobieren können, aber grafisch sehr schöne variante geht doch über die blendfunc von opengl. allerdungs benötigst du auch 2 maps, eine graustufen-map, in der alles, was angezeigt werden soll, schwarz ist. diese graustufen-map hat auch den vorteil, dass man gutaussehende halbtransparenz hinbekommt (wenn diese bereiche dann grau sind).
die zweite map ist die farb-map. hier malst du zum beispiel dein karo rein. jedoch musst du darauf achten, dass du auf schwarzen hintergrund zeichnest (anstatt clFuchsia).
hier ein beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, Texture[2]); glEnable(GL_BLEND); glBlendFunc(GL_DST_COLOR,GL_ZERO); glDisable(GL_LIGHTING); glColor(1,1.0,1.0); glBegin(GL_QUADS); glTexCoord2f(0, 1); glVertex(0,0.7,-1); glTexCoord2f(0, 0); glVertex(0,1,-1); glTexCoord2f(1, 0); glVertex(1,1,-1); glTexCoord2f(1, 1); glVertex(1,0.7,-1); glEnd;
glBindTexture(GL_TEXTURE_2D, Texture[0]); glBlendFunc(GL_ONE,GL_ONE); glBegin(GL_QUADS); glTexCoord2f(0, 1); glVertex(0,0.7,-1); glTexCoord2f(0, 0); glVertex(0,1,-1); glTexCoord2f(1, 0); glVertex(1,1,-1); glTexCoord2f(1, 1); glVertex(1,0.7,-1); glEnd; |
ich hoffe, es hilft dir ein bisschen weiter...
Moderiert von Tino: Delphi-Tags hinzugefügt.
_________________ Logiqu. Just feel it...
|
|
schneegurke 
      
Beiträge: 19
Win XP
C# (VS 2003, 2005 Express)
|
Verfasst: Do 24.07.03 12:57
Besten Dank! Ich werd beide Varianten ausprobieren. Hat mir sehr geholfen!
|
|
|