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ť 12
OpenGL, časť 13
OpenGL, časť 14
OpenGL, časť 15
OpenGL, časť 16
OpenGL, časť 17
OpenGL, časť 18
OpenGL, časť 7
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ť 11 
Výuka | Dna 11.6.2002 | Johny | 1 znamka, priemer 1.00 | 5869 videni | 990 WAP videni

V tejto časti si ukážeme, ako sa dá spraviť jednoduchý efekt, ako je vlajka vo vetre len za použitia zmeny polohy bodov, medzi ktoré umiestňujeme textúru.

Za zmienku stojí najmä funkcia glPolygonMode, ktorá nastavuje akým spôsobom majú byť polygóny spracované. Či si želáme, aby boli textúrované, alebo chceme len čiary (wireframe) alebo iba body. A takto to môžeme nastaviť pre prednú aj zadnú stranu polygónu. To, ktorá strana je predná a zadná už bolo spomínané v niektorom predchádzajúcom tutoriale. Keď sme schovávali zadnú stranu polygónu BACK FACE CULLING. Je dobré, že týmto pravidlom sa riadia aj niektoré 3D editory, lebo týmto spôsobom ukladajú 3D objekty. Niekde som čítal, že to ide podľa toho, v akom poradí sú ukladané body nejakého polygónu. Je to dobrá idea, napríklad si predstavte štvorec. Koľkými spôsobmi sa dá zapísať poradie 4 bodov ? Je ich dosť, asi tak 4.3.2 a to je ... 24. Vau a vyrátal som to bez kalkulačky.

Použijeme knižnicu math, aby sme mohli používať sinus.
#include <math.h>

Vytvoríme si pole pre našu vlajku, napríklad 44,44 štvorcov. Pre každý bod sa udržiava jeho poloha a hodnota sinus.


float points[ 45 ][ 45 ][3];
int wiggle_count = 0;
GLfloat hold;

Zadnú stranu budeme kresliť ako textúrovanú a prednú ako čiary.

glPolygonMode( GL_BACK, GL_FILL );
glPolygonMode( GL_FRONT, GL_LINE );


for(int x=0; x<45; x++)
{
for(int y=0; y<45; y++)
{
points[x][y][0]=float((x/5.0f)-4.5f);
points[x][y][1]=float((y/5.0f)-4.5f);
points[x][y][2]=float(sin((((x/5.0f)*40.0f)/360.0f)*3.141592654*2.0f));
}
}


int DrawGLScene(GLvoid)
{
int x, y;
float float_x, float_y, float_xb, float_yb;


Vyčistíme a posunieme sa kam ideme kresliť, zvolíme textúru.

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glTranslatef(0.0f,0.0f,-12.0f);

glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);

glBindTexture(GL_TEXTURE_2D, texture[0]);

Prebehneme vez všetky body a pre každý nakreslíme štvorec so správnou časťou textúry.

glBegin(GL_QUADS);
for( x = 0; x < 44; x++ )
{
for( y = 0; y < 44; y++ )
{


float_x = float(x)/44.0f;
float_y = float(y)/44.0f;
float_xb = float(x+1)/44.0f;
float_yb = float(y+1)/44.0f;



glTexCoord2f( float_x, float_y);
glVertex3f( points[x][y][0], points[x][y][1], points[x][y][2] );
glTexCoord2f( float_x, float_yb );
glVertex3f( points[x][y+1][0], points[x][y+1][1], points[x][y+1][2] );
glTexCoord2f( float_xb, float_yb );
glVertex3f( points[x+1][y+1][0], points[x+1][y+1][1], points[x+1][y+1][2] );

glTexCoord2f( float_xb, float_y );
glVertex3f( points[x+1][y][0], points[x+1][y][1], points[x+1][y][2] );
}
}
glEnd();




if( wiggle_count == 2 )
{

for( y = 0; y < 45; y++ )
{
hold=points[0][y][2];
for( x = 0; x < 44; x++)
{
points[x][y][2] = points[x+1][y][2];
}
points[44][y][2]=hold;
}
wiggle_count = 0;
}
wiggle_count++;


xrot+=0.3f;
yrot+=0.2f;
zrot+=0.4f;

return TRUE;
}

V OpenGL sa dá spraviť pohybom polygónov a priesvitnosťou kopa efektov, neskôr si to ukážeme aj v ďalšej podobnej časti o Particle efektoch, rôzne fontány, oheň, dym.
V tej nasledujúcej časti si ukážeme vec, ktorá sa už skutočne každému zíde, a síce sú to Listy. Nie nejaké milostné, ale Display listy, ktoré výrazne uľahčia robotu, je to rýchlejší spôsob vykresľovania a hlavne je prehladnejší.

Zdroják dnešnej časti nájdete tu:
http://www.softsklad.host.sk/opengl/lesson11.zip


Najnovsie clanky od tohto redaktora
Podobne clanky