<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>7 pamoka
</title>
<meta http-equiv="Content-Language" content="lt">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1257">
<link href="global.css" rel="stylesheet" type="text/css">
<link href="print.css" rel="stylesheet" type="text/css" media="print">
<style>
<!--//
a:link {font-family:Verdana,Tahoma,Helvetica; font-weight:normal; color:#008000; text-decoration:none; }
a:active {font-family:Verdana,Tahoma,Helvetica; font-weight:normal; color:#008000; text-decoration:none; }
a:visited {font-family:Verdana,Tahoma,Helvetica; font-weight:normal; color:#008000; text-decoration:none; }
a:hover {font-family:Verdana,Tahoma,Helvetica; font-weight:normal; color:#ee0033; text-decoration:none; }
ul, li {font-family:Verdana,Tahoma,Helvetica; font-weight:normal; text-align:justify; margin: 6px 2% 6px; }
p, body {font-family:Verdana,Tahoma,Helvetica; font-weight:normal; }
//-->
</style>
</head>
<body>
<br>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Ðioje pamokoje jûs iðmoksite naudotis trim skirtingais tekstûrø filtrais. Iðmoksite kaip judinti objektà klaviatûros klaviðais, taip pat iðmoksite uþdëti paprastà apðvietimà savo OpenGL scenai. Ði pamoka apima daug dalykø, todël jei ið pereitø pamokø ne viskà ásigilinote, gráþkite ir perþiûrëkite jas. Labai svarbu gerai suprasti pagrindus prieð pereinant prie sekanèio kodo.
<br>
<br>
Mes vël modifikuosime kodà ið pirmos pamokos. Kaip áprastai, jei bus kokiø dideliø pasikeitimø, èia bus paraðyta visa modifikuoto kodo sekcija. Pradësime nuo keliø naujø kintamøjø pridëjimo.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
#include
<windows.h
> <font class="theme">// Windows header failas
</font>
#include
<stdio.h
> <font class="theme">// Standartinës áveties/iðvesties headeris ( NAUJA )
</font>
#include
<gl\gl.h
> <font class="theme">// OpenGL32 bibliotekos headeris
</font>
#include
<gl\glu.h
> <font class="theme">// GLu32 bibliotekos headeris
</font>
#include
<gl\glaux.h
> <font class="theme">// GLaux bibliotekos headeris
</font>
HDC hDC=NULL;
<font class="theme">// GDI árenginio kontekstas
</font>
HGLRC hRC=NULL;
<font class="theme">// Nuolatinis renderinimo kontekstas
</font>
HWND hWnd=NULL;
<font class="theme">// Laiko mûsø lango rankenëlë
</font>
HINSTANCE hInstance;
<font class="theme">// Laiko aplikacijos egzemplioriø
</font>
bool keys[256];
<font class="theme">// Masyvas naudojamas klaviatûros rutinai
</font>
bool active=TRUE;
<font class="theme">// Lango aktyvumo gairë
</font>
bool fullscreen=TRUE;
<font class="theme">// Pilno ekrano gairë
</font>
</pre>
<table style="width: 1367px; height: 32px;" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Kodas, pateiktas þemiau, yra naujas. Mes pridësime tris boolean tipo kintamuosius. BOOL reiðkia kintamàjá, kuris gali bûti TRUE arba FALSE. Sukuriame kintamàjá pavadinimu light, kuris nurodys ar apðvietimas ájungtas ar iðjungtas. Kintamieji lp ir fp naudojami tikrinti ar klaviðai L arba R yra nuspausti ar ne. Mes paaiðkinsime kam ðitie kintamieji reikalingi kode vëliau. Dabar uþteks þinoti, kad jie yra svarbûs.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
BOOL light;
<font class="theme">// Apðvietimas ÁJUNGTAS / IÐJUNGTAS
</font>
BOOL lp;
<font class="theme">// L nuspausta?
</font>
BOOL fp;
<font class="theme">// F nuspausta?
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar mes apraðysime penkis kintamuosius, kurie kontroliuos x aðies kampà (xrot), y aðies kampà (yrot), greitá, kuriuo suksis kubas ant x aðies (xspeed) ir greitá, kuriuo kubas suksis ant y aðies (yspeed). Mes taip pat sukursime kintamàjá vardu z, kuris kontroliuos kubo gylá ekrane.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
GLfloat xrot;
<font class="theme">// X sukimasis
</font>
GLfloat yrot;
<font class="theme">// Y sukimasis
</font>
GLfloat xspeed;
<font class="theme">// X sukimosi greitis
</font>
GLfloat yspeed;
<font class="theme">// Y sukimosi greitis
</font>
GLfloat z=-5.0f;
<font class="theme">// Gylis ekrane
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar sukursime màsyvus, kurie bus naudojami apðvietimo sukûrimui. Naudosime dviejø skirtingø tipo apðvietimà. Pirmas apðvietimo tipas vadinamas apsupanèiu (ambient) apðvietimu. Apsupantis apðvietimas yra toks apðvietimas, kuris neina ið konkreèios pusës. Visi scenos objektai bus apðviesti ðiuo apðvietimu. Kitas apðvietimo tipoas yra sklindanti ðviesa. Sklindanèià ðviesà sukuria ðvietos ðaltinis ir jà atspindi scenos objektø pavirðiai. Bet koks pavirðius, tiesiogiai paliestas ðviesos ðaltinio bus labai ryðkus, o zonos, kurias ðviesa sunkiai sieks bus tamsesnës. Tai suteikia graþø apðvietimo efektà mûsø kubo sienoms.
<br>
<br>
Ðviesa sukuriama tokiu paèiu bûdu kaip ir spalva. Jei pirmas skaièius bus 1.0f, o sekantys du 0.0f, turësime ryðkiai raudonà ðviesà. Jei treèias skaièius bus 1.0f ir pirmi du 0.0f, turësime ryðkiai mëlynà ðviesà. Paskutinis skaièius yra alpha reikðme. Kolkas jà palikime 1.0f.
<br>
<br>
Taigi, eilutëje þemiau mes apraðome pusës intensyvumo baltà apsupanèià ðviesà (0.5f). Kadangi visi skaièiai yra 0.5f, mes gauname ðviesà tarp visiðkai iðjungtos (juoda) ir pilno ryðkumo (balta). Tokios paèios reikðmes raudona, mëlyna ir þalia susijungia nuo juodos (0.0f) iki baltos (1.0) ðviesos. Be apsupanèios ðviesos, vietos, kuriø nepasiekia sklindanti ðviesa, bus labai tamsios.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f };
<font class="theme">// Apsupanti (ambient) ðviesa ( NAUJA )
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Sekanèioje eilutëje mes apraðome labai ryðkia, pilno intensyvumo sklintanèià ðviesà. Visos reikðmës yra 1.0f. Tai reiðkia, kad ðviesa bus tokia ryðki, kokia tik gali bûti.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
GLfloat LightDiffuse[]= { 1.0f, 1.0f, 1.0f, 1.0f };
<font class="theme">// Sklindanti (diffuse) ðviesa ( NAUJA )
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Galiausiai, mes apraðome ðviesos ðaltinio pozicijà. Pirmi trys skaièiai yra tokie patys kaip glTranslate trys skaièiai. Pirmas skaièius skirtas x koordinatei, antras skaièius - y koordinatei, o treèias skaièius - z koordinatei. Mes norime, kad ðviesa sklistø kubo priekyje, pirma reikðmë bus 0.0f (nejudiname ðviesos ðaltinio x koordinatëje). Taip pat jo nereikia judinti y koordinatëje, taigi antra reiðkmë taip pat bus 0.0f. Mes norime, kad ðviesa bûtø prieð kubà, taigi ðviesos ðaltiná padësime arèiau þiûrovo. Tarkime, kad monitoriaus ekrano paviðius yra 0.0f z koordinatëje. Ðviesà padësime 2.0f z koordinatëje. Jei mes ið tikro galëtume matyti ðviesos ðaltiná, jis bûtø uþ monitoriaus stiklo. Tam, kad ðviesa bûtø matoma ant kubo, turime ásitikinti, kad ir kubas bûtø uþ monitoriaus stiko. Jei kubas nebebûtø uþ monitoriaus, mes jo nebematytume ir mums nebebûtø jokio skirtumo kur yra ðviesos ðaltinis.
<br>
<br>
Nëra lengvo treèio parametro apibûdinimo. Jûs jau turëtumëte þinoti, kad -2.0f yra arèiau jûsø nei -5.0f. -100.0f bûtø monitoriaus tolumoje. Kai atstumas yra 0.0f, vaizdas yra toks didelis, kad jis uþpildo visà monitoriø. Kai pereinama prie teigiamø reiðkmiø, vaizdas daugiau nebematomas ekrane, nes jis yra prieð monitoriø. Tai yra uþ vaizdo ribø. Objektas tebeegzistuoja, taèiau jûs jo daugiau nebegalite matyti.
<br>
<br>
Palikime paskutiná skaièiø 1.0f. Jis pasako OpenGL, kad apraðytos koordinatës yra ðviesos ðaltinio pozicija. Daugiau apie tai tolesnioje pamokoje.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
GLfloat LightPosition[]= { 0.0f, 0.0f, 2.0f, 1.0f };
<font class="theme">// Ðviesos ðaltinio pozicija ( NAUJA )
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Filtro kintamasis apraðytas þemiau yra skirtas sekimui, kurià teksturà rodyti. Pirma tekstûra (tekstûra 0) yra padaryta naudojant gl_nearest (be glotninimo). Antroji tekstûra (tekstûra 1) naudoja gl_lineal filtrà, kuris ðiek tiek suglotnina vaizdà. Treèioji tekstûra (tekstûra 2) naudoja mipmap tekstûras, kurios sukuria labai graþiai atrodanèià tekstûrà. filter kintamasis bus 0, 1 arba 2, priklauso nuo to kurià tekstûrà mes norime naudoti. Pradësime nuo pirmosios.
<br>
<br>
GLuint texture[3] sukuria vietà trim skirtingoms tekstûroms. Tekstûros bus laikomos texture[0], texture[1] ir texture[1] kintamuosiuose.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
GLuint filter;
<font class="theme">// Koká filtrà naudoti
</font>
GLuint texture[3];
<font class="theme">// Laikome tris tekstûras
</font>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
<font class="theme">// WndProc deklaravimas
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar mes uþkrausime paveiksliukà ir ið jo sukursime tris skirtingas tekstûras. Ði pamoka naudoja glaux bibliotekà paveikëliø uþkrovimui, taigi ásitikinkite, kad jûs turite ðià bibliotekà prieð kompiliuojant kodà. Delphi ir Visual C++ turi glaux bibliotekas. Paaiðkinsime kà daro naujos kodo eilutës. Jei nesuprantate kurios nors eilutës, kuri neturi komentaro - paþiûrëkite ðeðtà pamokà. Joje paaiðkinamas uþkrovimas ir tektûrø þemëlapiø kûrimas ið paveikslëliø.
<br>
<br>
Iðkart po virðuje esanèio kodo ir prieð ReSizeGLScene(), mes ádësime sekantá kodà. Èia yra tas pats kodas, naudojamas ðeðtoje pamokoje, naudojamas uþkrauti paveiklëlio failà. Niekas nesikeièia. Jei jûs kaþko nesuprantate - paþiûrëkite ðeðtà pamokà, ten viskas paaiðkinta.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
AUX_RGBImageRec *LoadBMP(char *Filename)
<font class="theme">// Uþkrauname paveiksliuko failà
</font>
{ FILE *File=NULL;
<font class="theme">// Failas
</font>
if (!Filename)
<font class="theme">// Ásitikiname, kad failas tikrai duotas
</font>
{ return NULL;
<font class="theme">// Jei ne - gràþiname NULL
</font>
} File=fopen(Filename,"r");
<font class="theme">// Patikriname ar failas egzistuoja
</font>
if (File)
<font class="theme">// Jei egzistuoja
</font>
{ fclose(File);
<font class="theme">// Uþdarome failà
</font>
return auxDIBImageLoad(Filename);
<font class="theme">// Uþkraunama paveiksliukà ir gràþiname rodyklæ
</font>
} return NULL;
<font class="theme">// Jei nepavyko uþkrauti, gràþiname NULL
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Sekantis kodas uþkrauna paveiksliukà (panaudodamas virðuje parodytà kodà) ir konvertuoja já á 3 tekstûras. Status naudojamas sekti ar tekstûra buvo uþkrauta ir sukurta, ar ne.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
int LoadGLTextures()
<font class="theme">// Uþkrauna paveikslëlius ir konvertuoja juos á tekstûras
</font>
{ int Status=FALSE;
<font class="theme">// Statuso indikatorius
</font>
AUX_RGBImageRec *TextureImage[1];
<font class="theme">// Sukuriame vietà tekstûroms
</font>
memset(TextureImage,0,sizeof(void *)*1);
<font class="theme">// Nukreipiame rodyklæ á NULL
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar mes uþkrauname paveiksliukà ir konvertuojame já á tekstûrà. TextureImage[0]=LoadBMP("Data/Crate.bmp") perðoks á LoadBMP() kodà. Failas vardu Crate.bmp Data kataloge bus uþkrautas. Jei viskas ávyks gerai, paveiksliuko duomenys bus uþkrauti á TextureImage[0]. Status bus pakeistas á TRUE ir mes pradësime kurti savo tekstûrà.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
<font class="theme">// Uþkrauname paveikslëlá, þiûrime ar nëra klaidø, jei paveikslëlio failo nëra - paliekame programà
</font>
if (TextureImage[0]=LoadBMP("Data/Crate.bmp")) { Status=TRUE;
<font class="theme">// Pakeièiame Status á TRUE
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar, kai mes uþkrovëme TextureImage[0], pradësime naudoti jo duomenis 3 tekstûrø kûrimui. Þemesnë eilute pasako OpenGL, kad mes norim sukurti tris tekstûras ir kad kiekviena jø bus ádëta á texture[0], texture[1] ir texture[2] kintamuosius.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
glGenTextures(3,
&texture[0]);
<font class="theme">// Kuriame tris tekstûras
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Ðeðtoje pamokoje mes naudojome linijiná filtrà tekstûrø þemëlapiams. Jie reikalavo didelio kiekio procesoriaus galios, bet jie atrodo tikrai graþiai. Pirmas tekstûros tipoas, kuria mes kursime ðioje pamokoje naudoja GL_NEAREST. Ðis tekstûros tipas nenaudoja jokio filtro. Jis naudoja maþai procesoriaus galios, taèiau atrodo labai blogai. Jei jûs kada þaidëte þaidimà, kuriame tekstûros atrodë labai kampuotos, tai þaidimas turbût naudojo ðá tekstûros tipà. Vienintelis ðio tipo pliusas yra tas, kad tekstûros, sukurtos naudojant ðá tipà paprastai veikia labai gerai ant lëtø kompiuteriø.
<br>
<br>
Jûs pastebësite, kad mes naudojame GL_NEAREST ir MIN, ir MAG. Jûs galite sujungti GL_NEAREST su GL_LINEAR, tokiu atveju tekstûra atrodys ðiektiek geriau. MIN_FILTER yra filtras, naudojamas kai paveikslëlis yra pieðiamas maþesnis, nei tikrasis jo dydis. MAG_FILTER yra naudojamas tada, kai paveikslëlis yra pieðiamas didesnis, nei jo tikrasis dydis.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
<font class="theme">// Sukuriame artimiausià filtruotà tekstûrà
</font>
glBindTexture(GL_TEXTURE_2D, texture[0]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
<font class="theme">// ( NAUJA )
</font>
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
<font class="theme">// ( NAUJA )
</font>
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]-
>sizeX, TextureImage[0]-
>sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]-
>data);
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Sekanti tekstûras yra padaroma ið to paties tekstûros tipo kaip ir ðeðtoje pamokje, linijinio filtro. Vienintelis dalykas kuris pasiketë yra tai, kad mes tekstûrà laikome texture[1] kintamàjame vietoj texture[0].
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
<font class="theme">// Kuriame linijinio filtro tekstûrà
</font>
glBindTexture(GL_TEXTURE_2D, texture[1]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]-
>sizeX, TextureImage[0]-
>sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]-
>data);
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar naujas tipas tekstûrø kûrimui. Mipmappingas. Galbût jûs pastebëjote, kad kai jûs padarote paveiksliukà labai maþà, jis praranda labai daug detalumo. Raðtai, kurie atrodë graþiai pradeda atrodyti labai blogai. Kai jûs nurodote OpenGL kurti mipmapped tekstûras, OpenGL bando kurti skirtingø dydþiø aukðtos kokybës tekstûras. Kai jûs pieðiate mipmapped tekstûrà ant ekrano, OpenGL pasirenka geriausiai atrodanèià tekstûrà ið tø, kurias jis padarë ir pieðià jà vietoj pradinës tekstûros dydþio keitimo.
<br>
<br>
Kaip jau sakëme ðeðtojoje pamokoje, yra bûdas apeiti 64,128,256 dydþio ir ploèio tekstûros limità, kurá uþdeda OpenGL. gluBuild2DMipmaps yra tas bûdas. Jûs galite naudoti betkokio dydþio paveiksliukus kuriant mipmapped tekstûras OpenGL automatiðkai pakeis á paveiksliukà á reikiamà dydá.
<br>
<br>
Naudojame texture[2] mipmappintai tekstûrai. Dabar jau turime tris - pirmà, be jokio filtro, antrà su linijiniu filtru ir treèià, kuri naudoja mipmapped tekstûras. Mes baigëme kurti tekstûras ðiai pamokai.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
<font class="theme">// Kuriame mipmapped tekstûras
</font>
glBindTexture(GL_TEXTURE_2D, texture[2]); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
<font class="theme">// ( NAUJA )
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Sekantis kodas kuria mipmapped tekstûrà. Mes kuriame 2D tekstûra naudodami tris spalvas (raudonà, þalià, mëlynà). TextureImage[0]-
>sizeX yra paveikslëlio plotis. TextureImage[0]-
>sizeY yra paveikslëlio aukðtis. GL_RGB reiðkia, kad mes naudojame raudonà, þalià ir mëlynà spalvas. GL_UNSIGNED_BYTE reiðkia, kad duomenys, kurie padaro tekstûrà yra baitai. TextureImage[0]-
>data yra rodyklë, nukreipta á paveiksliuko, ið kurio darome tekstûrà, duomenis
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]-
>sizeX, TextureImage[0]-
>sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]-
>data);
<font class="theme">// ( NAUJA )
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar mes atlaisvinsime RAM, kurá uþëmë paveiksliuko duomenys. Mes patikriname ar paveiksliuko duomeys buvo ákelti á TextureImage[0]. Jei buvo - juos iðtriname. Tada atlaisviname paveiksliuko struktûrà ásitikindami, kad visa sunaudota atmintis iðlaisvinama.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
if (TextureImage[0])
<font class="theme">// Jei yra tekstûra
</font>
{ if (TextureImage[0]-
>data)
<font class="theme">// Jei tekstûros paveiksliukas yra
</font>
{ free(TextureImage[0]-
>data);
<font class="theme">// Iðlaisvinam tekstûros paveiksliuko atmintá
</font>
} free(TextureImage[0]);
<font class="theme">// Atlaisviname paveiksliuko struktûrà
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Galø gale gràþiname statuso indikatoriø. Jei viskas gerai - Status kintamàjá pakeièiame á TRUE. jei kaþkas buvo blogai - Status bus FALSE.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
return Status;
<font class="theme">// Gràþiname statuso indikatoriø
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar uþkrauname tekstûras ir inicializuojame OpenGL nustatymus. Pirma InitGL eilutë uþkrauna tekstûras naudodama virðuje apraðytà kodà. Po to, kai tekstûros sukurtos, ájungiame 2D tekstûrø mappingà su glEnable(GL_TEXTURE_2D). Ðeðëliø rëþimas nustatomas á glotnø ðeðëlá. Fono spalva nustatoma á juodà, ájungiame gylio testavimà, tada ájungiame graþius perspektyvus skaièiavimus.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
int InitGL(GLvoid)
<font class="theme">// Visi OpenGL nustatymai eina èia
</font>
{ if (!LoadGLTextures())
<font class="theme">// Perðokame prie tekstûrø krovimo
</font>
{ return FALSE;
<font class="theme">// Jei tekstûra neuþkrauta, graþiname FALSE
</font>
} glEnable(GL_TEXTURE_2D);
<font class="theme">// Ájungiame tekstûrø mappingà
</font>
glShadeModel(GL_SMOOTH);
<font class="theme">// Ájungiame glotnius ðeðëlius
</font>
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
<font class="theme">// Juodas fonas
</font>
glClearDepth(1.0f);
<font class="theme">// Gylio buferio nustatymai
</font>
glEnable(GL_DEPTH_TEST);
<font class="theme">// Ájungia gylio testavimà
</font>
glDepthFunc(GL_LEQUAL);
<font class="theme">// Gylio testavimo tipas
</font>
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
<font class="theme">// Graþûs perspektyvos skaièiavimai
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar sureguliuojame apðvietimà. Linija apaèioje nustato apsupanèios ðviesos intensyvumà. Naudosime pamokos pradþioje apraðyta kintàmàjá LightAmbient.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);
<font class="theme">// Nustatome apsupanèià ðviesà
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Toliau, nustatome sklindanèios ðviesos intensyvumà. Naudosime jau apraðytà kintàmàjá LightDiffuse.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);
<font class="theme">// Nustatome sklindanèià ðviesà
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Nurodome ðviesos ðaltinio pozicijà. Naudosime jau apraðytà kintàmàjá LightPosition.
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
glLightfv(GL_LIGHT1, GL_POSITION,LightPosition);
<font class="theme">// Ðviesos ðaltinio pozicija
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Galiausiai mes aktyvuojam ðviesà numeris 1. Taèiau mes dar neájungëm GL_LIGHTING, todël jûs dar nematysit apðvietimo. Ðviesa yra sutvarkyt, uþpozicijonuota ir ájungta, taèiau kol neájungsim GL_LIGHTING ðviesa neveiks.
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
glEnable(GL_LIGHT1);
<font class="theme">// Ájungiam ðviesà 1
</font>
return TRUE;
<font class="theme">// Inicializacija pavyko, graþinam TRUE
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Sekanèioj kodo dalyje, mes nupieðim tekstûruotà kubà. Að pakomentuosiu tik kelias eilutes kurios yra naujos. Jei neþinote kà nekomentuotos eiluitës daro, paskaitykite 6 pamokà.
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
int DrawGLScene(GLvoid)
<font class="theme">// Èia darome visà paiðymà
</font>
{ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
<font class="theme">// Iðvalom ekranà ir gylio buferá
</font>
glLoadIdentity();
<font class="theme">// Atstatom vaizdà
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Sekanèios eilutës pozicionuoja ir apsuka kubà.
</font><font class="text"> glTranslatef(0.0f,0.0f,z) pastumia kubà z aðimi.
</font><font class="text">glRotatef(xrot,1.0f,0.0f,0.0f) pasuka kubà x aðimi.
</font><font class="text">glRotatef(yrot,0.0f,1.0f,0.0f) naudoja kintamajá yrot pasukimui y aðimi.
</font><font class="text">
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
glTranslatef(0.0f,0.0f,z);
<font class="theme">// Poslinkis z aðimi
</font>
glRotatef(xrot,1.0f,0.0f,0.0f);
<font class="theme">// pasukimas x aðimi, xrot kampu
</font>
glRotatef(yrot,0.0f,1.0f,0.0f);
<font class="theme">// pasukimas y aðimi yrot kampu
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Sekanèios eilutës yra panaðios á 6 pamokos, bet vietoj
</font><font class="text"> texture[0] mes naudojam
</font><font class="text">texture[filter]. Kiekvienà kartà paspaudus 'F', filter reikðmë padidës. Jei ta reikðmë didesnë nei 2, filter yra graþinamas á 0. Kai programa startuoja, filter reikðmë yra 0. Naudojant ðá filter kintamajá, mes galime pasirinkt ið keletos tekstûrø.
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
glBindTexture(GL_TEXTURE_2D, texture[filter]);
<font class="theme">// Parenkam tekstûrà priklausomai nuo filtro
</font>
glBegin(GL_QUADS);
<font class="theme">// Pradedam pieðti
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text"></font><font class="text">glNormal3f yra nauja funkcija ðiose pamokose. Normalë yra linija nutaikyta tiesiai ið poligono 90 laipsniø kampu. Kai naudojame apðvietimà, reikia apibrëþti normales. Normalës pasako openGL á kurià pusæ poligonas yra nukreiptas. Jei normalës nëra apibrëþtos, keisti dalykai pradeda darytis. Poligonai kurie neturëjo bût apðviesti, pasidaro apðviesti ir pan.
</font><br>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
<font class="theme">// Front Face
</font>
glNormal3f( 0.0f, 0.0f, 1.0f);
<font class="theme">// Normalë nutaikyta á þiurovà
</font>
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
<font class="theme">// Taðkas 1 (Front)
</font>
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme">2 (Front)
</font>
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme">3 (Front)
</font>
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme">4 (Front)
</font>
<font class="theme">// Back Face
</font>
glNormal3f( 0.0f, 0.0f,-1.0f);
<font class="theme">// Normalë nutaikyta nuo þiûrovo
</font>
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme">1 (Back)
</font>
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme">2 (Back)
</font>
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme">3 (Back)
</font>
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme">4 (Back)
</font>
<font class="theme">// Top Face
</font>
glNormal3f( 0.0f, 1.0f, 0.0f);
<font class="theme">// Normalë nutaikyta á virðø
</font>
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme"> 1 (Top)
</font>
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme"> 2 (Top)
</font>
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme"> 3 (Top)
</font>
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme"> 4 (Top)
</font>
<font class="theme">// Bottom Face
</font>
glNormal3f( 0.0f,-1.0f, 0.0f);
<font class="theme">// Normalë nutaikyta þemyn
</font>
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme"> 1 (Bottom)
</font>
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme"> 2 (Bottom)
</font>
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
<font class="theme">//
</font><font><font class="theme">Taðkas
</font></font><font class="theme">3 (Bottom)
</font>
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
<font class="theme">//
</font><font><font><font><font class="theme">Taðkas
</font></font></font></font><font class="theme"> 4 (Bottom)
</font>
<font class="theme">// Right face
</font>
glNormal3f( 1.0f, 0.0f, 0.0f);
<font class="theme">// Normalë nutaikyta á deðinæ
</font>
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f);
<font class="theme">//
</font><font><font><font><font class="theme">Taðkas
</font></font></font></font><font class="theme"> 1 (Right)
</font>
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f);
<font class="theme">//
</font><font><font><font><font class="theme">Taðkas
</font></font></font></font><font class="theme"> 2 (Right)
</font>
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f);
<font class="theme">//
</font><font><font><font><font class="theme">Taðkas
</font></font></font></font><font class="theme"> 3 (Right)
</font>
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f);
<font class="theme">//
</font><font><font><font><font class="theme">Taðkas
</font></font></font></font><font class="theme"> 4 (Right)
</font>
<font class="theme">// Left Face
</font>
glNormal3f(-1.0f, 0.0f, 0.0f);
<font class="theme">//
</font><font><font class="theme">Normalë nutaikyta á kairæ
</font></font>
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
<font class="theme">//
</font><font><font><font><font class="theme"> Taðkas
</font></font></font></font><font class="theme">1 (Left)
</font>
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
<font class="theme">//
</font><font><font><font><font class="theme">Taðkas
</font></font></font></font><font class="theme"> 2 (Left)
</font>
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
<font class="theme">//
</font><font><font><font><font class="theme">Taðkas
</font></font></font></font><font class="theme"> 3 (Left)
</font>
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
<font class="theme">//
</font><font><font><font><font class="theme">Taðkas
</font></font></font></font><font class="theme"> 4 (Left)
</font>
glEnd();
<font class="theme">// Pabaiga pieðimo
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Sekanèios dvi eilutes padidina xrot ir yrot pagal xspeed ir yspeed reikðmes. Jei reikðmë xspeed arba yspeed yra didelë, xrot ir yrot tada didës greitai. Kuo greièiau xrot arba yrot didëja, tuo greièiau kubas sukasi.
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
xrot+=xspeed;
<font class="theme">// pridedam xspeed prie xrot
</font>
yrot+=yspeed;
<font class="theme">// pridedam yspeed prie yrot
</font>
return TRUE;
<font class="theme">// tæsiam
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Dabar judam prie WinMain(). Mes dabar pridësim kodà ðviesø ájungimui/iðjungimui, kubo pasukimui, filtro pakeitimui ir kubo stumdymui ið ir á ekranà.
<br>
Arèiau prie WinMain() apaèios jûs pamatysite komandà SwapBuffers(hDC). Iðkart po tos eilutes ádëkit ðá kodà.
<br>
Ðis kodas tikrina ar buvo nuspaustas 'L' klaviðas. Jei 'L' yra nuspaustas ir lp nëra false, reiðkia klaviðas jau buvo nuspaustas arba yra laikomas nuspaustas, tada niekas neávyks.
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
SwapBuffers(hDC);
<font class="theme">// Sukeièiam buferius (double buffering)
</font>
if (keys['L']
&& !lp)
<font class="theme">// Ar L yra nuspaustas, bet nelaikomas?
</font>
{
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Jei lp buvo false, reiðkia 'L' klaviðas nebuvo nuspaustas arba buvo atleistas, lp pasidaro TRUE. Tai priverèia vartotojà atleisti 'L' klaviðà, kad ðitas kodas galëtø bûti ávykdytas vël. Jei mes ðito patikrinimo nedarytumem ir klaviðas bûtø laikomas nuspaustas, apðvietimas "mirksëtø".
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
lp=TRUE;
<font class="theme">// lp pasidaro true
</font>
light=!light;
<font class="theme">// Pakeièiam ðviesos bûsenà.
</font>
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar priklausomai nuo light kintamojo reikðmës ájungiam arba iðjungiam apðvietimà.
</font><br>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
if (!light) { glDisable(GL_LIGHTING); } else { glEnable(GL_LIGHTING); } }
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Dabar patikrinam ar 'L' klaviðas nustojo bûti spaudþiamas. Jei taip, tai kintamasis lp pasidaro FALSE
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
if (!keys['L'])
<font class="theme">// Has L Key Been Released?
</font>
{ lp=FALSE;
<font class="theme">// If So, lp Becomes FALSE
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar padarom kaþkà panaðaus su 'F' klaviðu. Jei klaviðas yra spaudþiamas ir jis nëra laikomas arba nëra paspaustas anksèiau tada kintamasis fp bus true, kas reiðkia, kad klaviðas dabar yra spaudþiamas. Paskui filter reikðmë yra didinama. Jei filter reikðmë virðija 2, tada filter reikðmë yra numuðama á 0.
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
if (keys['F']
&& !fp)
<font class="theme">// Ar F klaviðas yra spaudþiamas?
</font>
{ fp=TRUE;
<font class="theme">// fp pasidaro TRUE
</font>
filter+=1;
<font class="theme">// filter reikðmë padidinama
</font>
if (filter
>2)
<font class="theme">// Ar filter reikðme daugiau uþ 2?
</font>
{ filter=0;
<font class="theme">// Jei taip, filter reikðme daroma 0
</font>
} } if (!keys['F'])
<font class="theme">// Ar F buvo atleistas?
</font>
{ fp=FALSE;
<font class="theme">// Jei taip, fp tampa FALSE
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">Sekanèios eilutës tikrina ar yra spaudþiamas Page Up. Jei taip, maþinam z reikðmæ. Kai ðis kintamasis maþëja, kubas vaþiuoja tolyn z aðimi. Ðis kintamasis yra naudojamas DrawGLScene funkcijoje.
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
if (keys[VK_PRIOR])
<font class="theme">// Ar page up yra spaudþiamas?
</font>
{ z-=0.02f;
<font class="theme">// Jei taip, maþinam z
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Ðis kodas daro tà patá, tik jis tikrina Page Down ir ðiuo atvëju didina z reikðmæ.
</font><br>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
if (keys[VK_NEXT])
<font class="theme">// Ar Page Down yra spaudþiamas?
</font>
{ z+=0.02f;
<font class="theme">// Jei taip, didinam z reikðmæ
</font>
}
</pre>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="tl">
<br>
</td>
<td class="tc" width="100%">
<br>
</td>
<td class="tr">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="l">
<br>
</td>
<td class="back3" valign="top" width="100%">
<font class="text">
Dabar beliko patikrint rodykliø klaviðus. Spaudþiant kairæ/deðinæ, xspeed yra didinamas arba maþinamas. Kuo ilgiau klaviðas bus nuspaustus, tuo greièiau suksis kubas.
<br>
</font>
</td>
<td class="r">
<br>
</td>
</tr>
</tbody>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr>
<td class="bl">
<br>
</td>
<td class="bc" width="100%">
<br>
</td>
<td class="br">
<br>
</td>
</tr>
</tbody>
</table>
<pre>
if (keys[VK_UP])
<font class="theme">// Ar rodyklë á virðø yra nuspausta?
</font>
{ xspeed-=0.01f;
<font class="theme">// Jei taip maþinam xspeed
</font>
} if (keys[VK_DOWN])
<font class="theme">// Ar rodyklë á apaèià yra nuspausta?
</font>
{ xspeed+=0.01f;
<font class="theme">// Jei taip, didinam xspeed
</font>
} if (keys[VK_RIGHT])
<font class="theme">// Ar rodyklë á deðinæ yra spaudþiama?
</font>
{ yspeed+=0.01f;
<font class="theme">// Jei taip didinam yspeed
</font>
} if (keys[VK_LEFT])
<font class="theme">// Ar rodyklë á kairæ yra spaudþiama?
</font>
{ yspeed-=0.01f;
<font class="theme">// Jei taip maþinam yspeed
</font>
}
</pre>
</body>
</html>