OpenGL v Delphi3



Čtverec s texturou



Zobrazení čtverce
Funkční příklad a zdroják ke stažení (223k)
Inicializace OpenGL
Pixelový formát
Nastavení prostoru
Vlastnosti objektu
Načtení bitmapy
Zobrazení scény
FormDestroy





Zobrazení čtverce

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.

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.

glBegin(GL_POLYGON);
Začátek definování tvaru a vlastností objektu. Další hodnoty jsou (GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP).

glEnd;
konec definování objektu.

glTexCoord2f(0,0);
glTexCoord2f(1,0);
glTexCoord2f(1,1);
glTexCoord2f(0,1);

souřadnice určující pozici textury uvnitř objektu (čtverce).

glVertex3f( 0.5,-0.5,0.0);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(-0.5, 0.5,0.0);
glVertex3f( 0.5, 0.5,0.0);

souřadnice objektu (čtverce).

Příklad:



Inicializace OpenGL

wglCreateContext(Canvas.Handle);
Funkce vytvoří nový RC.
RC určuje zařízení, do kterého budou volané funkce OpenGL směřovat svůj výstup.

wglMakeCurrent(Canvas.Handle,RC);
Nastaví daný RC jako aktuální.

glClearColor(0.0, 0.0, 0.0, 0.0);
Funkce vymaže buffery základních barev. Hodnoty znamenají (červená, zelená, modrá, alpha). Základní hodnoty jsou nulové.

glShadeModel(GL_FLAT);
Funkce slouží k přepínání typu stínování.
GL_FLAT - je obyčejné stínování. Stín je znázorňován pomocí hrubě odstupňovaných širokých pruhů. Další vlastnost je (GL_SMOOTH). Je to dokonalejší typ stínování. Zde je stín již reprezentován plynulým, hladkým přechodem, využívajícím širokou část dostupné barevné palety.

glEnable(GL_DEPTH_TEST);
Funkce otestuje velikost bufferu.

glEnable(GL_Texture_2D);
Funkce zapne zobrazení 2D textury.
glPixelStorei(GL_Unpack_Alignment,1);
Funkce nastaví paměťový mód.
GL_Unpack_Alignment - rozbaluje pixelová data z paměti. Další hodnoty jsou (GL_UNPACK_SWAP_BYTES, GL_UNPACK_LSB_FIRST, GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_PIXELS, GL_UNPACK_SKIP_ROWS).
Dalších šest hodnot naopak zabalují pixelová data do paměti. Jsou to (GL_PACK_SWAP_BYTES, GL_PACK_LSB_FIRST, GL_PACK_ROW_LENGTH, GL_PACK_SKIP_PIXELS, GL_PACK_SKIP_ROWS, GL_PACK_ALIGNMENT).
1 - hodnota, do které se ukládají informace o pixelových datech.

glTexParameterf(GL_Texture_2D,GL_Texture_Wrap_S,GL_Repeat);
glTexParameterf(GL_Texture_2D,GL_Texture_Wrap_T,GL_Repeat);
glTexParameterf(GL_Texture_2D,GL_Texture_Mag_Filter,GL_Linear);
glTexParameterf(GL_Texture_2D,GL_Texture_Min_Filter,GL_Linear);

Funkce nastavují vzhled povrchu objektu. Objekt se vytváří pomocí texturového povrchu, který je daný souřadnicemi (s ) nebo ( t) .
GL_Texture_2D - specifikuje cílovou texturu. Další hodnota je (GL_TEXTURE_1D).
GL_Texture_Wrap_S - nastavuje parametry souřadnic (s) texturového povrchu pomocí hodnot (GL_REPEAT, nebo GL_CLAMP).
GL_Texture_Wrap_T - nastavuje parametry souřadnic (t) texturového povrchu pomocí hodnot (GL_REPEAT, nebo GL_CLAMP).
GL_Repeat - vytvoří opakující se pořadí souřadnic.
GL_CLAMP - vytvoří pevné pořadí souřadnic.
GL_Texture_Mag_Filter - zvětší plochu textury, pokud je menší než plocha objektu.
GL_Texture_Min_Filter - zmenší plochu textury, pokud je větší než plocha objektu.
GL_Linear - vypočítá střed objektu a od tohoto středu rozloží texturu do všech stran vzhledem k šířce těchto stran. Další hodnoty jsou (GL_NEAREST) - rozloží texturu vzhledem k okolním bodům textury. Je sice rychlejší než (GL_Linear), ale textura se různě deformuje.

glTexEnvf(GL_Texture_Env, GL_Texture_Env_Mode, GL_Modulate);
funkce nastavuje texturové prostředí.
GL_Texture_Env - specifikuje texturové prostředí.
GL_Texture_Env_Mode - specifikuje rozložení texturových bodů. Další hodnota je (GL_TEXTURE_ENV_COLOR).
GL_Modulate - texturová funkce. Další hodnoty jsou (GL_DECAL, GL_BLEND).

Příklad:




Pixelový formát



GDI
rozhraní Windows pro 2D grafiku.

DC
určuje zařízení, do kterého bude směřovat výstup volané funkce GDI.

PFD
(PixelFormatDescriptor) je vrstva mezi OpenGL rutinami pro výstup a operacemi výstupu podporovanými Windows. PFD popisuje, jak jsou zobrazovány barvy.

ChoosePixelFormat(DC,@PFD)
vrací PFD co nejvíce vyhovujícím daným požadavkům.

SetPixelFormat(DC,nPixelFormat,@PFD)
nastaví daný pixel formát danému DC.

Příklad:




Nastavení prostoru



glMatrixMode(GL_PROJECTION);
funkce která nastavuje matici zobrazení prostoru.
Další hodnoty jsou : (GL_MODELVIEW) a (GL_TEXTURE).

glLoadIdentity;
funkce načte nastavenou matici.

gluPerspective(30.0,ClientWidth / ClientHeight,1.0,10.0);
funkce nastavuje prostor, jak se bude jevit z pozice kamery (jak se zobrazí na formuláři).
Hodnoty znamenají:
30.0 - zorný úhel kamery.
ClientWidth / ClientHeight - poměr šířky a výšky projekčního plátna (formuláře).
1.0 - hodnota zadává nejmenší vzdálenost, od které je objekt viditelný.
10.0 - hodnota zadává největší vzdálenost, od které již objekt není viditelný.

glViewport(0,0,ClientWidth,ClientHeight);
funkce nastavuje velikost zobrazované plochy.
0,0 - zadává levý-dolní roh. Základní hodnoty jsou (0,0).
ClientWidth,ClientHeight - zadává šířku a výšku.

Příklad:




Vlastnosti objektu



glMatrixMode(GL_MODELVIEW);
funkce která nastavuje matici zobrazení objektu. Další hodnoty jsou(GL_PROJECTION) a (GL_TEXTURE).

glLoadIdentity;
funkce načte nastavenou matici.

glTranslatef(X,Y,Z);
Pozice kamery.

glTranslatef(0,0,0);
Střed rotace objektu.

glRotatef(UhelX, 1, 0, 0);
funkce nastavuje rotaci objektu.
UhelX - úhel rotace.
1 - rotace v ose X.
0 - rotace v ose Y.
0 - rotace v ose Z.
V tomto případě objekt rotuje v ose X.

glRotatef(UhelY, 0, 1, 0);
rotace v ose Y.

glRotatef(UhelZ, 0, 0, 1);
rotace v ose Z.

Příklad:




Načtení bitmapy
Vše vysvětluje příklad.



Zobrazení scény


RC
určuje zařízení, do kterého budou volané funkce OpenGL směřovat svůj výstup.

wglMakeCurrent(Canvas.Handle,RC);
Nastaví daný RC jako aktuální.

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
funkce maže buffery.
GL_COLOR_BUFFER_BIT - maže buffer, který je právě vybrán pro barevné kreslení.
GL_DEPTH_BUFFER_BIT - maže hloubku bufferu.
Další hodnoty jsou (GL_ACCUM_BUFFER_BIT) - maže akumulační buffer,
(GL_STENCIL_BUFFER_BIT) - maže buffer barvy na malování šablonou.

glCallList(Model);
zapíná display list (seznam příkazů).
Model - specifikuje jméno daného seznamu. Musí to být kladné celé číslo. Slouží jako jednoznačná identifikace daného seznamu.

glFlush;
funkce maže buffery všech spuštěných funkcí.

SwapBuffers(Canvas.Handle);
funkce vymění buffery. Tato funkce se musí zavolat, jinak se objekt nezobrazí.

wglMakeCurrent(0,0);
funkce nuluje handly RC.

Příklad:




FormDestroy


RC
určuje zařízení, do kterého budou volané funkce OpenGL směřovat svůj výstup.

wglDeleteContext(RC);
zruší dané RC.

Příklad:







Funkční příklad a zdroják ke stažení (223k)

Nahoru na začátek stránky




Čtverec bez textury Procházení scénou, ve které rotuje krychle


Home