OpenGL v Delphi3



Válec s průhlednou texturou

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



V tomto příkladě poprvé používám místo časovače (Timer) funkci
BeginThread(nil, 0, Tread, nil, 0, ThreadID);
Tato funkce vytvoří oddělený proces. Docílí se tím plynulého a rychlejšího překreslování scény.

Dále jsem použil novou knihovnu 'OpenGL.pas' a funkci s ní spojenou
glBindTexture(GL_TEXTURE_2D, 0);
která by se také měla podílet na rychlejším překreslování.

LoadBitmap(Cesta + 'Image1.bmp');
Natažení bitmapy do seznamu.

glTexImage2d(GL_Texture_2D,0,3,Velikost,Velikost,0,GL_RGB,GL_Unsigned_byte,@buffer);
Funkce specifikuje vlastnosti dvourozměrné textury.
GL_Texture_2D - specifikuje cílovou texturu. Musí být vždy (GL_Texture_2D).
0 - specifikuje spupeň detailnosti zobrazení. 0 je základní hodnota. Čím větší hodnota, tím horší zobrazení.
3 - specifikuje číslo barevných součástí textury. Hodnoty musí být 1 (černobílá textura), 2 (černobílá textura zobrazená jen do půlky čtverce), 3 (barevná textura) nebo 4 (barevná textura).
Velikost - specifikuje šířku a výšku textury. Musí být 1,2,4,8,16,32,64,128,256 atd.
0 - specifikuje šířku ohraničení textury. Musí být 0 nebo 1.
GL_RGB - specifikuje pixelový formát. Další hodnoty jsou (GL_COLOR_INDEX, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA,, GL_RGBA, GL_LUMINANCE, GL_LUMINANCE_ALPHA).
GL_Unsigned_byte - specifikuje datový typ pixelu. Další hodnoty jsou (GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT)
@buffer - specifikuje ukazatel na texturová data v paměti.

glNewList(Model,GL_COMPILE);
Tato funkce spolu s funkcí (glEndList) vytváří nebo nahrazují seznam příkazů. Tyto seznamy jsou skupiny GL příkazů, které jsou připravené pro následné spuštění. Všechny následující příkazy jsou uloženy do seznamu.
Model - specifikuje jméno daného seznamu. Musí to být kladné celé číslo. Slouží jako jednoznačná identifikace daného seznamu.
GL_COMPILE - specifikuje mód kompilace. V tomto případě jsou příkazy jen zkompilovány. Další hodnota je (GL_COMPILE_AND_EXECUTE) což znamená že příkazy jsou spouštěny, když jsou kompilovány do seznamu.

glEndList;
Konec seznamu.

plast := gluNewQuadric();
Funkce vytvoří nový objekt (plášť válce).

zakl1 := gluNewQuadric();
Funkce vytvoří nový objekt (první základnu válce).

gluQuadricOrientation(qobj,GLU_OUTSIDE);
Vnější strana pláště odráží světlo.

gluQuadricOrientation(zakl1,GLU_INSIDE);
Vnější strana základny odráží světlo.

gluQuadricTexture(plast, true);
Funkce otexturuje plášť.

gluQuadricTexture(zakl1, true);
Funkce otexturuje základnu.

gluCylinder(plast, 1, 1, 2, 20, 5);
Funkce zobrazí plášť.
plast - definice objektu.
1 - poloměr dolní části válce.
1 - poloměr horní části válce.
2 - výška válce.
20 - počet čtyřúhelníků na X souřadnici sítě, ze které se skládá plášť.
5 - počet čtyřúhelníků na Y souřadnici sítě, ze které se skládá plášť.

gluDisk(zakl1, 0, 1, 20, 1);
Funkce zobrazí základnu.
zakl - definice objektu.
0 - velikost poloměru vnitřní kružnice.
1 - velikost poloměru vnější kružnice.
20 - počet čtyřúhelníků na X souřadnici sítě, ze které se skládá základna.
1 - počet čtyřúhelníků na Y souřadnici sítě, ze které se skládá základna.

glEnable(GL_BLEND);
Funkce zapne průhlednost textur.

glBlendFunc(GL_ONE, GL_ONE);
Funkce nastaví průhlednost textur. První parametr GL_ONE zadává barvu obsaženou v textuře, která se bude míchat s barvou druhého parametru GL_ONE.
Další hodnoty jsou
pro první parametr: (GL_ZERO, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA_SATURATE)
pro druhý parametr: (GL_ZERO, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA).




Další funkce jsou stejné jako v kapitole Čtverec s texturou.

Příklad:


Kužel potažený texturou GLDrawElements
Home