Autor Beitrag
schneegurke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win XP
C# (VS 2003, 2005 Express)
BeitragVerfasst: 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:

ausblenden 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(00);
glVertex2f(gx, gy - GLHeight(TileHeight));
glTexCoord2f(01);
glVertex2f(gx, gy);
glTexCoord2f(11);
glVertex2f(gx + GLWidth(TileWidth), gy);
glTexCoord2f(10);
glVertex2f(gx + GLWidth(TileWidth), gy - GLHeight(TileHeight));
glEnd;


Damit jeder weiss, was genau ich mit Transparenz meine, hier das Bild:
user defined image

Die Rosa-Farbe soll sozusagen nur nicht mitgezeichnet werden.
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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:

ausblenden 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:
ausblenden 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:
ausblenden 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;
  //Hier dein Quad Zeichnen.

  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43

Win XP
Delphi 2006 Pro
BeitragVerfasst: Do 24.07.03 09:11 
hi!

ich habe die variante mit
ausblenden 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:
ausblenden 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]);  // Mask-Map
glEnable(GL_BLEND);
glBlendFunc(GL_DST_COLOR,GL_ZERO);
glDisable(GL_LIGHTING);
glColor(1,1.0,1.0);  // Hiermit lässt sich die Stärke der Transparenz ergeln
glBegin(GL_QUADS);  // Polygon-Maske zeichnen
glTexCoord2f(01);
glVertex(0,0.7,-1);
glTexCoord2f(00);
glVertex(0,1,-1);
glTexCoord2f(10);
glVertex(1,1,-1);
glTexCoord2f(11);
glVertex(1,0.7,-1);
glEnd;

glBindTexture(GL_TEXTURE_2D, Texture[0]);  // Farb-Map
glBlendFunc(GL_ONE,GL_ONE);
glBegin(GL_QUADS);  // Polygon nochmal zeichnen
glTexCoord2f(01);
glVertex(0,0.7,-1);
glTexCoord2f(00);
glVertex(0,1,-1);
glTexCoord2f(10);
glVertex(1,1,-1);
glTexCoord2f(11);
glVertex(1,0.7,-1);
glEnd;

ich hoffe, es hilft dir ein bisschen weiter...

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.

_________________
Logiqu. Just feel it...
schneegurke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 19

Win XP
C# (VS 2003, 2005 Express)
BeitragVerfasst: Do 24.07.03 12:57 
Besten Dank! Ich werd beide Varianten ausprobieren. Hat mir sehr geholfen!