<html>
<head>
<title>4 pamoka
</title>
<meta http-equiv=Content-Language content=lt>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<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>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table1">
<tr>
<td class="back3" vAlign="top" width="100%"><font class="text">Praeitoje konsultacijoje aš
mokinau jus kaip trikampius ir keturraÄius papildyti spalva. Å ioje pamokoje
aš mokinsiu jus kaip pasukti šiuos spalvotus objektus apie sukimosi ašį.
<br>
<br>
PanaudojÄ kodÄ
iÅ¡ praeitos pamokos, mes kai kur papildysime jį naujų. AÅ¡ perraÅ¡ysiu visÄ
kodo dalį apaÄioje, kad jus lengvai galÄtumÄte pastebÄti, kur jis buvo papildytas ir kur dar reikÄtų kai kÄ
pakeisti.
<br>
<br>
Mes pradÄsime nuo to, kad įvesime du kintamuosius ir tuo iÅ¡laikysime pasisukimo trasÄ
kiekvienam objektui. Tai yra daroma virÅ¡utinÄje dalyje mÅ«sų programos, žemiau kitų kintamųjų.
Jus pastebÄsite dvi naujas eilutes po 'bool fullscreen=TRUE;'. Å iose eilutÄse yra sukuriami du kintamieji su plaukianÄiu taÅ¡ku, kuriu dÄka mes galime pasukti objektus su labai dideliu tikslumu.
</font></td>
<td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table2">
<tr>
<td class="bl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="bc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="br"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<pre>#include
<windows.h
> <font class="theme">//Windows failo antraste
</font>
#include
<gl\gl.h
> <font class="theme">//OpenGL32 bibbliotekos failo antraste
</font>
#include
<gl\glu.h
> <font class="theme">//GLu32 bibliotekos failo antraste
</font>
#include
<gl\glaux.h
> <font class="theme">//GLaux bibliotekos failo antraste
</font>
HDC hDC=NULL;
<font class="theme">// Privatus GDI aplinkos irankiai
</font>
HGLRC hRC=NULL;
<font class="theme">// Nuolatinis irankiu atvaizdavimas
</font>
HWND hWnd=NULL;
<font class="theme">// turi sutvarkyti musu langa
</font>
HINSTANCE hInstance;
<font class="theme">// Eina taikymo pavyzdys
</font>
bool keys[256];
<font class="theme">// Naudojamas klaviaturos masyvo sablonas
</font>
bool active=TRUE;
<font class="theme">// Window aktyvus zymeklis
</font>
GLfloat rtri;
<font class="theme">// Trikampio kampas(naujas)
</font>
GLfloat rquad;
<font class="theme">// Keturkampis (naujas)
</font>
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table3">
<tr>
<td class="tl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="tc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="100%" height="28"></td>
<td class="tr"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table4">
<tr>
<td class="l"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="back3" vAlign="top" width="100%"><font class="text">Mes pradÄsime nuo to, kad įvesime du kintamuosius ir tuo iÅ¡laikysime pasisukimo trasÄ
kiekvienam objektui. Tai yra daroma virÅ¡utinÄje dalyje mÅ«sų programos, žemiau kitų kintamųjų.
Jus pastebÄsite dvi naujas eilutes po 'bool fullscreen=TRUE;'. Å iose eilutÄse yra sukuriami du kintamieji su plaukianÄiu taÅ¡ku, kuriu dÄka mes galime pasukti objektus su labai dideliu tikslumu.
</font></td>
<td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table5">
<tr>
<td class="bl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="bc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="br"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<pre>int DrawGLScene(GLvoid)
<font class="theme">// Stai cia mes darome visa, brezini
</font>
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
<font class="theme">// Isvalome ekrana ir buferio gyli
</font>
glLoadIdentity();
<font class="theme">// Anuliuoja vaizda
</font>
glTranslatef(-1.5f,0.0f,-6.0f);
<font class="theme">// Perkelia i ekrana kaireje
</font>
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table6">
<tr>
<td class="tl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="tc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="100%" height="28"></td>
<td class="tr"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table7">
<tr>
<td class="l"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="back3" vAlign="top" width="100%"><font class="text">SekanÄios kodo eilutÄs visiÅ¡kai naujos. glRotatef(Angle,Xvector,Yvector,Zvector) atsakingi už objekto sukimasi aplink ašį. Jus gausite labai daug naudos naudojant Å¡itÄ
komandÄ
. Kampas â tai dažniausiai skaiÄius iÅ¡saugotas kintamajame, kuris atvaizduoja kiek jus norite pasukti objektÄ
. Xvector, Yvector ir Zvector parametrai kartu atvaizduoja vektorių, aplink kurį ir vyksta tas sukimasis. Jeigu jus naudojate skaiÄius (1,0,0), tai reiÅ¡kia jus apraÅ¡ote vektrių, kuris juda iÅ¡ pirmo unito palei x ašį į deÅ¡iniÄ
ja puse. SkaiÄiai (-1,0,0) apraÅ¡o vektorių, kuris juda iÅ¡ pirmo unito palei x ašį į kairiÄ
ja puse.
<br>
<br>
D. Michael Traub: has supplied the above explanation of the Xvector,
Yvector and Zvector parameters.
<br>
<br>
Kad geriau suprastumete X, Y ir Z rotacijas, aš paaiškinsiu naudojant pavizdžius...
<br>
<br>
X aÅ¡is â posukis x aplink x ašį vykdomas taip pat kaip ir OpelGL aplinkoje.
<br>
<br>
Y aÅ¡is â isivaizduokite, kad jus stovite vidury lauko. Didžiulis tornado ateina į jusu puse. Tornado centras juda iÅ¡ virÅ¡aus į apaÄiÄ
. Purvas ir nuolaužos sukasi aplink Y ašį ( tornado centrÄ
) iÅ¡ kairÄs į deÅ¡inÄ. Kai jus sukate ka nors su OpenGL, tai realizuojama tokių pat budų.
<br>
<br>
Z aÅ¡is â jus žiurite tiesiai į malÅ«nÄ
. MalÅ«no centras rodo į jus ir nuo jusu. MalÅ«no sparnai sukasi aplink z ašį (malÅ«no centra) pagal laikrodžio rodyklÄ arba prie jÄ
. Kai jus sukate ka nors su OpenGL, tai realizuojama tokių pat budų.
<br>
<br>
Tai sekanÄioje kodo eilutÄje , jeigu rtri bus tapatus 7, mes suksime 7 aplink Y ašį ( iÅ¡ kairÄs į deÅ¡inÄ). Jus galite paeksperimentuoti su kodu. Pakeiskite 0,0fâs į 1,0fâs ir 1,0f į 0,0f tam, kad vienu metu galÄtumÄte pasukti trikampį aplink X ir Y aÅ¡is.
<br>
<br>
Labai svarbu prisiminti, kad posÅ«kiai matuojami laipsniais. Jeigu rtri turi 10 reikÅ¡mÄ, tai mes pasuksime objektÄ
10 laipsniu kampu.
</font></td>
<td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table8">
<tr>
<td class="bl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="bc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="br"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<pre> glRotatef(rtri,0.0f,1.0f,0.0f);
<font class="theme">// suka aplink asi( Naujas trikampis )
</font>
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table9">
<tr>
<td class="tl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="tc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="100%" height="28"></td>
<td class="tr"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table10">
<tr>
<td class="l"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="back3" vAlign="top" width="100%"><font class="text">
Å itas kodas nebuvo pakeistas. Jis atvaizduoja spalvotÄ
lygų sumaiÅ¡ytÄ
trikampį. Trikampis bus braižomas kairioje ekrano pusÄje ir bus sukamas aplink Y ašį.
</font>
</td>
<td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table11">
<tr>
<td class="bl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="bc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="br"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<pre> glBegin(GL_TRIANGLES);
<font class="theme">// pradeda piesti trikampi
</font>
glColor3f(1.0f,0.0f,0.0f);
<font class="theme">// Nuspalvina tirkampio virsune raudonai
</font>
glVertex3f( 0.0f, 1.0f, 0.0f);
<font class="theme">// Nuspalvina trikampio pima taska
</font>
glColor3f(0.0f,1.0f,0.0f);
<font class="theme">// Nuspalvina trikampio kaire puse zaliai
</font>
glVertex3f(-1.0f,-1.0f, 0.0f);
<font class="theme">// Nuspalvina trikampio antra taska
</font>
glColor3f(0.0f,0.0f,1.0f);
<font class="theme">// Nuspalvina trikampio desine puse melynai
</font>
glVertex3f( 1.0f,-1.0f, 0.0f);
<font class="theme">// Nuspalvina trikampio trecia taska
</font>
glEnd();
<font class="theme">// Baigia spalvinti trikampi
</font>
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table12">
<tr>
<td class="tl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="tc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="100%" height="28"></td>
<td class="tr"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table13">
<tr>
<td class="l"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="back3" vAlign="top" width="100%"><font class="text">kanÄios dvi eilutes yra naujos. Pagalvokite apie rtri ir r-ratį kaip apie konteinerį. Programos virÅ¡uje mes sukÅ«rÄme konteinerius (GLfloat rtri, and GLfloat rquad). SukurÄ konteinerius, mes nieko ten nepatalpinome. Pirma eilute apaÄioje ADDS 0.2 priklauso Å¡itam konteineriui. Tai kiekvienÄ
kartÄ
, kai mes tikriname rtri reikÅ¡mÄ konteineryje po Å¡ios kodo eilutes, ji pakyla iki 0.2. R- ratis konteineris mažÄja iki 0.15. KiekvienÄ
kartÄ
kai mes tikriname r â ratį konteinerį, jis mažÄja iki 0.15. MažÄjimo atveju objektas sukasi į prieÅ¡ingÄ
puse nei didÄjimo atveju.
<br>
<br>
Pabandykite pakeisti + į â ir pasižiÅ«rÄkite kaip keisis posÅ«kio poslinkis. Pakeiskite reikÅ¡mes nuo 0.2 iki 1.0.
<br>
<br>
Kuo didÄsnis skaiÄius, to greiÄiau jis suksis. Mažesnis skaiÄius â lÄÄiau.
</font></td>
<td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table14">
<tr>
<td class="bl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="bc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="br"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<pre> glLoadIdentity();
<font class="theme">// Anuliuoja dabartinio modulio vaizdo matrica
</font>
glTranslatef(1.5f,0.0f,-6.0f);
<font class="theme">// Perkelia i desine 1,5 vieneto ir i Ekrana 6,0
</font>
glRotatef(rquad,1.0f,0.0f,0.0f);
<font class="theme">// Suka aplink x asi(naujas keturkampis)
</font>
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table15">
<tr>
<td class="tl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="tc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="100%" height="28"></td>
<td class="tr"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table16">
<tr>
<td class="l"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="back3" vAlign="top" width="100%"><font class="text">This
section of code remains the same. It draws a blue square made from one
quad. It will draw the square on the right side of the screen in it's
rotated position.
</font></td>
<td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table17">
<tr>
<td class="bl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="bc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="br"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<pre> glColor3f(0.5f,0.5f,1.0f);
<font class="theme">// Nustatome melyna spalva
</font>
glBegin(GL_QUADS);
<font class="theme">// piesiame kvadrata
</font>
glVertex3f(-1.0f, 1.0f, 0.0f);
<font class="theme">// kvadrato virsutinis kairys kampas
</font>
glVertex3f( 1.0f, 1.0f, 0.0f);
<font class="theme">// kvadrato virsutinis desinys kampas
</font>
glVertex3f( 1.0f,-1.0f, 0.0f);
<font class="theme">// apatinis desinys
</font>
glVertex3f(-1.0f,-1.0f, 0.0f);
<font class="theme">// apatinis kairys
</font>
glEnd();
<font class="theme">// baigia piesti kvadrata
</font>
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table18">
<tr>
<td class="tl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="tc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="100%" height="28"></td>
<td class="tr"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table19">
<tr>
<td class="l"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="back3" vAlign="top" width="100%"><font class="text">SekanÄios dvi eilutes yra naujos. Pagalvokite apie rtri ir r-ratį kaip apie konteinerį. Programos virÅ¡uje mes sukÅ«rÄme konteinerius (GLfloat rtri, and GLfloat rquad). SukurÄ konteinerius, mes nieko ten nepatalpinome. Pirma eilute apaÄioje ADDS 0.2 priklauso Å¡itam konteineriui. Tai kiekvienÄ
kartÄ
, kai mes tikriname rtri reikÅ¡mÄ konteineryje po Å¡ios kodo eilutes, ji pakyla iki 0.2. R- ratis konteineris mažÄja iki 0.15. KiekvienÄ
kartÄ
kai mes tikriname r â ratį konteinerį, jis mažÄja iki 0.15. MažÄjimo atveju objektas sukasi į prieÅ¡ingÄ
puse nei didÄjimo atveju.
<br>
<br>
Pabandykite pakeisti + į â ir pasižiÅ«rÄkite kaip keisis posÅ«kio poslinkis. Pakeiskite reikÅ¡mes nuo 0.2 iki 1.0.
Kuo didÄsnis skaiÄius, to greiÄiau jis suksis. Mažesnis skaiÄius â lÄÄiau.
Pabandykite pakeisti + į â ir pasižiÅ«rÄkite kaip keisis posÅ«kio poslinkis. Pakeiskite reikÅ¡mes nuo 0.2 iki 1.0.
Kuo didÄsnis skaiÄius, to greiÄiau jis suksis. Mažesnis skaiÄius â lÄÄiau.
</font></td>
<td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table20">
<tr>
<td class="bl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="bc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="br"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<pre> rtri+=0.2f;
<font class="theme">// didina kintamojo trikampio rotacija(naujas)
</font>
rquad-=0.15f;
<font class="theme">// sumazina kintamojo kvadrato rotacija( naujas )
</font>
return TRUE;
<font class="theme">// nesustabdo
</font>
}
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table21">
<tr>
<td class="tl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="tc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="100%" height="28"></td>
<td class="tr"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table22">
<tr>
<td class="l"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="back3" vAlign="top" width="100%"><font class="text">Finally
change the code to toggle window / fullscreen mode so that the title at
the top of the window is proper.
</font></td>
<td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table23">
<tr>
<td class="bl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="bc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="br"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<pre> if (keys[VK_F1])
<font class="theme">// ar F1 supresuotas?
</font>
{
keys[VK_F1]=FALSE;
<font class="theme">// jei taip tai netiesa
</font>
KillGLWindow();
<font class="theme">// trina musu langa
</font>
fullscreen=!fullscreen;
<font class="theme">// perjungia i visa ekrana / langu rezimas
</font>
<font class="theme">// atkuria musu OpenGL langa ( modifikuoja )
</font>
if (!CreateGLWindow(
"NeHe's Rotation Tutorial
",640,480,16,fullscreen))
{
return 0;
<font class="theme">// uzdaro langa jei nebuvo sukurtas
</font>
}
}
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table24">
<tr>
<td class="tl"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="tc" width="100%">
<img alt="" src="vaizdai/blank.gif" width="100%" height="28"></td>
<td class="tr"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
</tr>
</table>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table25">
<tr>
<td class="l"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
<td class="back3" vAlign="top" width="100%"><font class="text">Å iuoje pamokoje aÅ¡ pasistengiau kuo aiÅ¡kiau paaiÅ¡kinti, kaip pasukti objektus aplink aÅ¡is. Pažaiskite su kodu, pabandykite pasukinÄti skirtingus objektus aplink X, Y arba Z aÅ¡is, arba aplink visus vienu metu.
<br>
<br>
<b>Jeff Molofee
</b> (
<b>NeHe
</b>)
<br>
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/vc/lesson04.zip">Visual
C++
</a> Code For This Lesson.
<br>
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/asm/lesson04.zip">ASM
</a>
Code For This Lesson. ( Conversion by Foolman )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/bcb6/lesson04_bcb6.zip">
Borland C++ Builder 6
</a> Code For This Lesson. ( Conversion by
Christian Kindahl )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/beos/lesson04.zip">BeOS
</a>
Code For This Lesson. ( Conversion by Rene Manqueros )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/c_sharp/lesson04.zip">C#
</a>
Code For This Lesson. ( Conversion by Sabine Felsinger )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/csgl/lesson04.zip">VB.Net
CsGL
</a> Code For This Lesson. ( Conversion by X )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/cwarrior/lesson04.zip">
Code Warrior 5.3
</a> Code For This Lesson. ( Conversion by Scott Lupton
)
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/cygwin/lesson04.tar.gz">
Cygwin
</a> Code For This Lesson. ( Conversion by Stephan Ferraro )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/d/lesson04.zip">
D Language
</a> Code For This Lesson. ( Conversion by Familia Pineda
Garcia )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/delphi/lesson04.zip">
Delphi
</a> Code For This Lesson. ( Conversion by Michal Tucek )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/devc/lesson04.zip">Dev C++
</a>
Code For This Lesson. ( Conversion by Dan )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/euphoria/lesson04.zip">
Euphoria
</a> Code For This Lesson. ( Conversion by Evan Marshall )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/gameglut/lesson04.zip">
Game GLUT
</a> Code For This Lesson. ( Conversion by Milikas Anastasios )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/genu/lesson04.zip">Genu
</a>
Code For This Lesson. ( Conversion by Louis-Charles Dumais )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/glut/lesson04.zip">GLUT
</a>
Code For This Lesson. ( Conversion by Andy Restad )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/irix/lesson04.zip">Irix
</a>
Code For This Lesson. ( Conversion by Lakmal Gunasekara )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/java/lesson04.zip">Java
</a>
Code For This Lesson. ( Conversion by Jeff Kirby )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/java_swt/lesson04.zip">
Java/SWT
</a> Code For This Lesson. ( Conversion by Victor Gonzalez )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/jedisdl/lesson04.zip">
Jedi-SDL
</a> Code For This Lesson. ( Conversion by Dominique Louis )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/jogl/lesson04.jar">JoGL
</a>
Code For This Lesson. ( Conversion by Kevin J. Duling )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/lccwin32/lccwin32_lesson04.zip">
LCC Win32
</a> Code For This Lesson. ( Conversion by Robert Wishlaw )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/linux/lesson04.tar.gz">
Linux
</a> Code For This Lesson. ( Conversion by Richard Campbell )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/linuxglx/lesson04.tar.gz">
Linux/GLX
</a> Code For This Lesson. ( Conversion by Mihael Vrbanec )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/linuxsdl/lesson04.tar.gz">
Linux/SDL
</a> Code For This Lesson. ( Conversion by Ti Leggett )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/lwjgl/lesson04.jar">LWJGL
</a>
Code For This Lesson. ( Conversion by Mark Bernard )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/mac/lesson04.sit">Mac OS
</a>
Code For This Lesson. ( Conversion by Anthony Parker )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/macosxcocoa/lesson04.zip">
Mac OS X/Cocoa
</a> Code For This Lesson. ( Conversion by Bryan Blackburn
)
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/masm/lesson04.zip">MASM
</a>
Code For This Lesson. ( Conversion by Nico (Scalp) )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/pbasic/lesson04.zip">Power
Basic
</a> Code For This Lesson. ( Conversion by Angus Law )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/pelles_c/lesson04.zip">
Pelles C
</a> Code For This Lesson. ( Conversion by Pelle Orinius )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/perl/lesson04.zip">Perl
</a>
Code For This Lesson. ( Conversion by Cora Hussey )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/python/lesson04.tar.gz">
Python
</a> Code For This Lesson. ( Conversion by John Ferguson )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/realbasic/RBlesson04.zip">
REALbasic
</a> Code For This Lesson. ( Conversion by Thomas J. Cunningham
)
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/ruby/lesson04.zip">Ruby
</a>
Code For This Lesson. ( Conversion by Manolo Padron Martinez )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/scheme/lesson04.zip">
Scheme
</a> Code For This Lesson. ( Conversion by Jon DuBois )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/solaris/lesson04.zip">
Solaris
</a> Code For This Lesson. ( Conversion by Lakmal Gunasekara )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/vb/lesson04.zip">Visual
Basic
</a> Code For This Lesson. ( Conversion by Ross Dawson )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/vfortran/lesson04.zip">
Visual Fortran
</a> Code For This Lesson. ( Conversion by Jean-Philippe
Perois )
<br>
* DOWNLOAD
<a href="http://nehe.gamedev.net/data/lessons/vs_net/lesson04.zip">
Visual Studio .NET
</a> Code For This Lesson. ( Conversion by Grant James
)
<br>
</font></td>
</tr>
</table>
</body>
</html>