OpenGL v Delphi4



Průhledný okraj textury


Příklad a zdroják ke stažení (370k)


Pomocí blend příkazu 'glBlendFunc(GL_ONE, GL_ONE)' je průhledná černá barva, pomocí příkazu 'glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_COLOR)' je průhledná bílá barva. Barvy v textuře jsou však průhledné podle toho, kolik obsahuje černé v prvním případě, nebo bílé v druhém případě.

Pokud však chci, aby byl průhledný jenom černý okraj a ostatní, aby průhledné nebylo, jako v tomto případě motýl, je to trochu složitější. Musíme vytvořit masku průhlednosti.



Vše co je bílé, bude průhledné, kde je černá barva, bude neprůhledný objekt. Příkaz je 'glBlendFunc(GL_DST_COLOR,GL_ZERO)'.

Těsně před masku pak vložíme texturu.



A nastavíme průhlednost černé barvy 'glBlendFunc(GL_ONE, GL_ONE)'.


procedure DrawButterfly;
var
  i: integer;        
begin
  for i := 2 to 3 do begin                              //cyklu pro vytvoření druhé a třetí textury (první textura je pozadí)
    glEnable(GL_BLEND);                                 //zapne se průhlednost     
    if i = 2 then glBlendFunc(GL_DST_COLOR,GL_ZERO);    //pokud se má zobrazit druhá textura nastav tuto blend funkci                
    if i = 3 then glBlendFunc(GL_ONE, GL_ONE);          //pokud se má zobrazit třetí textura nastav tuto blend funkci
    glBindTexture(GL_TEXTURE_2D, TextureBin[i]);        //načti texturu
    glEnable(GL_TEXTURE_2D);                            //zapni texturování
    glBegin(GL_TRIANGLES);                              //vytvoř trojúhelníky
                                                        //první trojúhelník
      glTexCoord2f(Coord1[i].x,Coord1[i].y);            //texturová koordinace prvního bodu
      glVertex3f(Point1[i].x,Point1[i].y,Point1[i].z);  //pozice prvního bodu
      glTexCoord2f(Coord2[i].x,Coord2[i].y);            //texturová koordinace druhého bodu
      glVertex3f(Point2[i].x,Point2[i].y,Point2[i].z);  //pozice druhého bodu
      glTexCoord2f(Coord3[i].x,Coord3[i].y);            //texturová koordinace třetího bodu
      glVertex3f(Point3[i].x,Point3[i].y,Point3[i].z);  //pozice třetího bodu
                                                        //druhý trojúhelník        
      glTexCoord2f(Coord2[i].x,Coord2[i].y);            //texturová koordinace druhého bodu
      glVertex3f(Point2[i].x,Point2[i].y,Point2[i].z);  //pozice druhého bodu
      glTexCoord2f(Coord3[i].x,Coord3[i].y);            //texturová koordinace třetího bodu
      glVertex3f(Point3[i].x,Point3[i].y,Point3[i].z);  //pozice třetího bodu
      glTexCoord2f(Coord4[i].x,Coord4[i].y);            //texturová koordinace čtvrtého bodu
      glVertex3f(Point4[i].x,Point4[i].y,Point4[i].z);  //pozice čtvrtého bodu
    glEnd;                                              //konec vytváření trojúhelníků
    end;                                                //konec cyklu
    glDisable(GL_BLEND);                                //vypni průhlednost
    glPopMatrix;                                        
end;

Celej zdroják je tady
Transp_f.pas;


Míření Alpha Blending
Home