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ť 5 
Výuka | Dna 14.3.2002 | Johny | 2 znamky, priemer 1.00 | 5094 videni | 992 WAP videni

V minulej časti sme si už ukázali ako rotovať objekty. Takže teraz už vieme, ako niečo posúvať, rotovať a nakresliť nejaký ten polygón. Ale všetko zatiaľ bolo v 2D. Táto časť Vám asi neukáže nič prevratné, pretože určite Vás už napadlo riešenie, ako spraviť z nejakého trojuholníku, napríklad ihlan, alebo zo štvorca kocku. Ak nie, tak riešenie je veľmi jednoduché, stačí pridať pár trojuholníkov a štvorcov, správne ich umiestniť do priestoru a hneď je všetko 3D. Neskôr sa budeme aj zaoberať trošku jednoduchším spôsobom ako vytvoriť 3D objekt, iba použitím pár riadkov kódu. A tiež si ukážeme aj nejaké zlepšenia, aby sme všetko nepísali stále dookola.
Touto časťou už zároveň končí „nudný“ úvod do OpenGL. Aspoň pre mňa, lebo mňa OpenGL fascinovalo textúrovaním, a tiež rotáciou rôznych objektov v priestore, či už vyfarbené alebo len wireframe. Wire = drôt, teda vidíte len hrany objektu.
Po časti číslo 6 by ste už mohli byť schopný urobiť si vlastný prehliadač textúrovaných objektov, napríklad, páčil by sa Vám šetrič obrazovky, kde by sa kamera točila okolo nejakého 3Dmodelu, napríklad okolo modelu Phobosa z Quake 3 ? Môj obľúbený model, takže som si už taký programík spravil. Ale k tomu až neskôr, v inej časti.
V pyramíde farby ponecháme ako to bolo v trojuholníku, teda budú tam farebné prechody medzi jednotlivými rohmi. Kocka bude mať každú stranu inej farby.

int DrawGLScene(GLvoid) // tu kreslíme
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// vyčistíme obrazovku a depth buffer
glLoadIdentity();
glTranslatef(-1.5f,0.0f,-6.0f); // doľava a dozadu

glRotatef(rtri,0.0f,1.0f,0.0f); // okolo y osi

glBegin(GL_TRIANGLES); // trojuholníky


Možno niektorí z Vás si už skúsili spraviť 3D objekty sami, ale objekty sa netočili okolo vlastnej osi, ale okolo obrazovky. Treba si uvedomiť, že každý objekt, ktorý sa chce točiť okolo svojej osi, by mal mať niekde vo svojom vnútri, niekde v strede, čosi ako ťažisko. Teda stred každého objektu by ma byť 0,0,0. Teda vždy keď sa niekam presuniete a otočíte, tak kreslite objekt tak, aby bol od aktuálnej pozície na všetky smery do priestoru. Tým zabezpečíte, že keď sa otočí, tak sa otočí okolo svojho centra.

Nasledujúca časť kódu spraví pyramídu, ktorá sa bude točiť okolo svojej y osi. Vrchol pyramídy je nad centrom, ostatné rohy sú na strany od centra v rovnakej vzdialenosti od centra. Teda, tieto vrcholy majú akési relatívne pozície vzhľadom na 0,0,0. Napríklad, bod so súradnicami 3,0,0 sa bude točiť okolo osi y v kruhu. Ak ste niečo podobné robili sami pre Vaše programy, tak ste používali určite nejaké vzorce, kde vystupoval sínus, kosínus,... a tam bolo vidno, ako sa tieto dve funkcie dopĺňajú a ako sa nejaký bod pekne točí okolo svojho centra.
Každý trojuholník je kreslený proti-smeru hodinových ručičiek, dôvod bude vysvetlený v inej časti. Ale súvisí to s viditeľnosťou polygónov spredu a zozadu. Môžete ich kresliť aj v smere hodinových ručičiek, ale nikdy nemiešajte oba typy.


glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f); glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);

Rohom ponecháme tie isté farby, takže naša pyramída bude tak krajšia.
Všimnite si tiež, že sme stále v GL_TRIANGLES, nie je nutné dávať stále glEnd a potom znova GL_TRIANGLES.

glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f); glColor3f(0.0f,0.0f,1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f); glColor3f(0.0f,1.0f,0.0f);
glVertex3f( 1.0f,-1.0f, -1.0f);


glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f( 1.0f,-1.0f, -1.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(-1.0f,-1.0f, -1.0f);


Spodnú stranu nebude nikdy vidno, takže ju ani nekreslíme. Ak sa rozhodnete spraviť si program, ktorý bude rotovať pyramídu aj okolo iných osí, tak si ju môžete doplniť.

glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glEnd(); // koniec pyramídy

A teraz nakreslíme kocku, kocka má 6 stien, teda 6 štvorcov. Takže nie je veľmi o čom hovoriť. Treba ich nakresliť.
Pohli sme sa trošku hlbšie do obrazovky, aby kocka a pyramída vyzerali približne rovnako. Je to kvôli perspektíve, všetko, čo je ďalej bude viditeľné menšie.

glLoadIdentity();
glTranslatef(1.5f,0.0f,-7.0f);
glRotatef(rquad,1.0f,1.0f,1.0f);
glBegin(GL_QUADS); // kocka



glColor3f(0.0f,1.0f,0.0f);
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);

glColor3f(1.0f,0.5f,0.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);

glColor3f(1.0f,0.0f,0.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);

glColor3f(1.0f,1.0f,0.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f,-1.0f);

glColor3f(0.0f,0.0f,1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);


glColor3f(1.0f,0.0f,1.0f);
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
glEnd();
rtri+=0.2f;
rquad-=0.15f;
return TRUE;
}



Ako ste si všimli už nekomentujem úplne každý riadok, predpokladám, že tieto veci už viete z minulej časti, sú to všetko zrozumiteľné veci. A príkazy pre OpenGL sú veľmi priehľadné. Takže hneď vidíte, ktorá časť, čo robí.
Nabudúce, konečne textúry.

http://www.softsklad.host.sk/opengl/lesson05.zip


Najnovsie clanky od tohto redaktora
Podobne clanky