Hlavne menu We are sorry, but magazine AMMO is suspended. Here is just read-only access to the articles archive. Some features are removed because they were outdated, pointless in read-only (voting and pools), or it was missused by spammers (comments) etc. Now the webpages aren't maintained so when something will get broken most probably it won't be fixed at all. If you liked our magazine then please make donation with paypal so we can pay for traffic on this server.

TOP Výuka
01 Maľované krížovky 103 bodov
02 OpenGL, lákadlo 38 bodov
03 MySQL (+ použitie Visual C++ a PHP) 28 bodov
04 OpenGL, časť 1 21 bodov
05 Huffmanove kódovanie 19 bodov
06 Pascal, časť 1 18 bodov
07 Ako tlačiť s HP 16 bodov
08 Základy HTML časť 2 16 bodov
09 Základy HTML časť 3 13 bodov
10 Hry pre nenáročných + zdrojáky 10 bodov
11 OpenGL, úvod 8 bodov
12 Faktúrka v4.0 + zdrojáky v MS Visual C++ 6.0 7 bodov
13 OpenGL – Intermezzo 1 7 bodov
14 OpenGL povinná literatúra 6 bodov
15 Základy HTML časť 1 6 bodov
Najnovsie clanky
Kvalitné služby podľa skúseností iných - TopSlužby.sk
LOTR - Dve veže - Parodia - Scénka 2. časť
Neverwinter nights
Children Of Bodom-Hatebreeder
Kult Duny - 6. časť (Bonus)
Kult Duny - 5. časť (Filmy, Hry)
Dobré ráno. (morc certa, hora incerta...)
Kult Duny - 4. časť (Knihy 2/2)
Stretnutie Spoločenstva Tolkiena
GRAVE DIGGER – Knights Of The Cross
Kult Duny - 3. časť (Knihy 1/2)
Kult Duny - 2. časť (Pojmy)
Kult Duny - 1. časť (Úvod)
LOTR - Dve veže - Parodia - Scénka
Jackass
Vsetky clanky
Airsoft - Specnaz [4 clanky]
Básne [6 clankov]
Fantázia [4 clanky]
Filmy a DVD [51 clankov]
Hardware [10 clankov]
Hry [170 clankov]
Hry, návody [6 clankov]
Hudba [8 clankov]
Internet [7 clankov]
Knihy [6 clankov]
O AMME [4 clanky]
Pandemonium [10 clankov]
Poviedky [14 clankov]
Programy [18 clankov]
Rôzne [8 clankov]
Technické [3 clanky]
Úvahy [8 clankov]
Výuka [50 clankov]
Ako tlačiť s HP
Algoritmy v grafoch
Fake2
Faktúrka
Faktúrka v4.0 + zdrojáky v MS Visual C++ 6.0
Fract
HLSaver
Hry pre nenáročných + zdrojáky
Huffmanove kódovanie
IPicture2 & aggresiveoptimize.h
Maľované krížovky
MySQL (+ použitie Visual C++ a PHP)
OpenGL - GLWnd
OpenGL AMMO Saver
OpenGL povinná literatúra
OpenGL – Intermezzo 1
OpenGL, časť 10
OpenGL, časť 11
OpenGL, časť 12
OpenGL, časť 13
OpenGL, časť 14
OpenGL, časť 15
OpenGL, časť 16
OpenGL, časť 17
OpenGL, časť 18
OpenGL, časť 8
OpenGL, časť 9
Opengl – Cloth Simulation
RenameR
SkinMagic
WinSocket Communication via VC++
Údajové štruktúry
viac...
Zábava [5 clankov]
Zdravie [15 clankov]
Celkovy pocet clankov: 407
OpenGL, časť 2 
Výuka | Dna 2.3.2002 | Johny | 1 znamka, priemer 1.00 | 4638 videni | 915 WAP videni

V prvej časti sme si ukázali ako vytvoriť jednoduché OpenGL okno. V tejto časti si už ukážeme, ako vytvoriť základné typy pre kreslenie a to sú trojuholníky a štvorce. Po anglicky GL_TRIANGLES a GL_QUADS. Ako ste si všimli je pred tým GL_. To znamená, že ide o nejakú konštantu z knižnice OpenGL.

Použijeme celý program uvedený v časti 1. Jediná odlišnosť, ktorú spravíme bude vo funkcii DrawGLScene, kde pridáme kúsok kódu, ktorý nám nakreslí 1 trojuholník a 1 štvorec.

Tu už prichádza samotná funkcia DrawGLScene.

int DrawGLScene(GLvoid) // táto funkcia kreslí
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// vyčistíme obrazovku a Depth Buffer
glLoadIdentity();

Volaním funkcie glLoadIdentity() sa opäť nastavíte do centra obrazovky, teda na 0,0,0. Os X je vodorovná, os Y zvislá a os Z vedie kolmo na plochu monitora. Takto sa to dá ľahko predstaviť. Napravo sú kladné čísla, naľavo záporné. Podobne je to aj pri Y a Z. Hore je kladná časť, dole záporná. A keď pôjdeme hlbšie po Z, tak to bude záporné a naopak kladné.

glTranslatef(x, y, z) nás posunie v 3D priestore, podľa parametrov, ktoré sme zadali, a to v poradí X, Y a Z.
Riadok nižšie nás posunie po X-ovej osi o 1.5. Po osi Y sa neposunieme a po Z sa posunieme o 6.0 jednotiek. Vždy majte na pamäti, že sa nehýbete na pozíciu akú zadáte, ale meníte sa vždy „o“ pozíciu, ktorú zadáte. Teda vždy majte na pamäti, kde sa nachádzate a koľko sa chcete z tejto pozície posunúť a ktorým smerom.

glTranslatef(-1.5f,0.0f,-6.0f); // doľava 1.5, dozadu 6.0

Tak a teraz sme sa pohli doľava a dozadu, takže máme dobrý pohľad na našu scénu. A môžeme začať kresliť trojuholník. Kameru si predstavte, ako stabilnú, teda je stále na 0,0,0 pozícii a mení sa len všetko okolo. Kamera stojí a svet okolo sa hýbe. Vhodnými rotáciami a posunmi sa dá spraviť presne to isté ako keby sa hýbala kamera. Ale neskôr si ukážeme aj menšiu pomôcku, ktorá nám uľahčí pohyb kamery v priestore.
A teraz ten trojuholník.

glBegin(GL_TRIANGLES) znamená, že ideme začať kresliť trojuholníky a glEnd() povie OpenGL, že už sme skončili kreslenie trojuholníkov. Zvyčajne, keď chcete nakresliť 3 body, tak použijete GL_TRIANGLES. Kreslenie trojuholníkov je o kúsok rýchlejšie na väčšine kariet. Ak chcete nakresliť 4 body a nechce sa Vám to kresliť ako 2 trojuholníky, a jednoducho si chcete uľahčiť živote, tak použijeme GL_QUADS. Niektoré karty aj tak renderujú štvorec ako 2 trojuholníky, takže to bude to isté. Ak chcete viac bodov ako sú 4 použite GL_POLYGON.
V našom jednoduchom programe nakreslíme 1 trojuholník. Ak by sme chceli aj druhý, mali by sme pridať ešte ďalšie 3 riadky (3body). A všetky riadky by boli medzi glBegin(GL_TRIANGLES) a glEnd(). Nie je dôvod dávať stále glBegin(GL_TRIANGLES) a glEnd() dookola pre každé 3 body. (GL_POLYGON) môže pozostávať z viacerých bodov a nezáleží na tom koľko ich bude. Začneme glBegin(GL_POLYGON) a skončíme glEnd().

Prvý riadok za glBegin nám určuje prvý bod nášho trojuholníka. Prvý riadok glVertex je pre os X, druhý Y, tretí Z. Teda od aktuálnej pozície určíme o koľko jednotiek na X,Y,Z je umiestnený bod. Takže na prvom riadku sa na osi X nehýbeme, ideme len hore. V druhom sa pohneme doľava dole a v treťom doprava dole. Po osi Z sa nehýbeme, náš trojuholník vďaka tomu vyzerá nakreslený ako na ploche. Keby sme sa pohli aj po osi Z v nejakom bode, tak by náš trojuholník vyzeral inak. Jeden jeho vrchol by už totiž bol v priestore. glEnd() povie OpenGL, že viacej bodov už do trojuholníkov nepoužijeme. Ako výsledok uvidíme, jeden vyplnený trojuholník.

glBegin(GL_TRIANGLES); // kreslíme trojuholníky
glVertex3f( 0.0f, 1.0f, 0.0f); // vrch
glVertex3f(-1.0f,-1.0f, 0.0f); // vľavo dole
glVertex3f( 1.0f,-1.0f, 0.0f); // vpravo dole
glEnd(); // koniec trojuholníkov


Náš trojuholník je už nakreslený a teraz sa posunieme kúsok doprava a začneme kresliť štvorec. Keďže teraz sme o 1.5 vľavo. Tak ak sa pohneme o 1.5 doprava tak prídeme do centra 0,0,0 a keď sa pohneme o 3.0 doprava, tak sa dostaneme do pravej polky obrazovky.

glTranslatef(3.0f,0.0f,0.0f); // doprava o 3

A teraz nakreslíme štvorec. Začneme použitím GL_QUADS. Štvorec je zvyčajne 4 stranný polygón. Kód pre vytvorenie štvorca je veľmi podobný, ako pri tvorení trojuholníka. Jediný rozdiel je pri tom, že to robíme použitím GL_QUADS a je tam o jeden bod viacej. Kreslíme ľavý horný, pravý horný, pravý dolný a ľavý dolný vrchol. Nakreslením štvorca v poradí v smere hodinových ručičiek bude štvorec nakreslený ako zadná plocha (back face). Keby sme nakreslili objekt opačne, v proti smere hodinových ručičiek, by sme objekt nakreslili tak, že by bol „tvárou“ ku nám. Zatiaľ to nie je dôležité, ale neskôr bude a je potrebné vedieť o tom.

glBegin(GL_QUADS); // kreslíme štvorec
glVertex3f(-1.0f, 1.0f, 0.0f); // vľavo hore
glVertex3f( 1.0f, 1.0f, 0.0f); // vpravo hore
glVertex3f( 1.0f,-1.0f, 0.0f); // vpravo dole
glVertex3f(-1.0f,-1.0f, 0.0f); // vľavo dole
glEnd(); // koniec štvorcov
return TRUE;
}

Nakoniec ešte zmeníme ešte kód, ktorý prepína okno z window na fullscreen.

if (keys[VK_F1]) // F1 stlačené?
{
keys[VK_F1]=FALSE;
KillGLWindow(); fullscreen=!fullscreen;

if (!CreateGLWindow("First Polygon Tutorial",640,480,16,fullscreen))
{
return 0;
}
}


Tak a teraz už viete nakresliť základný typ objektov a to sú trojuholníky a štvorce. Zdrojový súbor si samozrejme môžete stiahnuť a vyskúšať si zaexperimentovať s rôznymi hodnotami. Pre tých, ktorým to zvládnu, môžu skúsiť urobiť nejakú obmenu, ktorá by napríklad posúvala nejaký trojuholník po kružnici alebo sa približoval a vzďaľoval.
MSVC++ http://www.softsklad.host.sk/opengl/lesson02.zip


Najnovsie clanky od tohto redaktora
Podobne clanky