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:
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).
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.
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.
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.
Vše vysvětluje příklad.
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.
RC
určuje zařízení, do kterého budou volané funkce OpenGL směřovat svůj výstup.
wglDeleteContext(RC);
zruší dané RC.
Home