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:
Home