Subversion Repositories komp-grafika

[/] [index_1.htm] - Rev 37

Compare with Previous | Blame | View Log

<html>
<head>
<title>1 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>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table1">
    <tr>
        <td class="back3" vAlign="top" width="100%"><font class="text">Sveiki atvykæ á OpenGL pamokà. <br>
        <br>
         
        Ði pamoka iðmokys jus, kaip sukonfigûruoti OpenGL langà.
        Langas gali bûti, bet kokio dydþio, bet kokios rezoliucijos ir bet kokios spalvos.
        Kodas yra labai lankstus ir gali bûti naudojamas visose OpenGL projektuose.
         <br>
        <br>
        Pirmas dalykas, kurá turësite padaryti tai sukurti Visual C + + projektà. <br>
        <br>
       
        <b>Pastaba #1:</b>Daugelis kompiliatoriø nenustato CDS_FULLSCREEN.
        Jei gaunate klaidos praneðimà CDS_FULLSCREEN tuomet reikia
        pridëti ðios eilutës kodà á savo programos virðø:
        # define CDS_FULLSCREEN 4. <br>
       
        Pirmos 4 eilutës yra bibliotekos,kurias mes naudosime. Jos atrodo taip :
        </font></td>
       
    </tr>
</table>
<pre>#include &lt;windows.h&gt;                             <font class="theme">// Antraðtës failas Windows</font>
#include &lt;gl\gl.h&gt;                                <font class="theme">// Antraðtës failas OpenGL32 biblioteka</font>
#include &lt;gl\glu.h&gt;                               <font class="theme">// Antraðtës failas GLu32 biblioteka</font>
#include &lt;gl\glaux.h&gt;                             <font class="theme">// Antraðtës failas GLaux biblioteka</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">
        Toliau reikia sukurti visø kintamøjø, kuriuos ketinate naudoti savo programà.
        Ði programa padës sukurti tuðèià OpenGL langà.
        Sukursime keletà kintamøjø ir bus jie naudojami OpenGL programai paraðyti.
      <br>
        <br>
        Pirmoje eilutëje átraukiamas rendenimo kontekstas.
        Kiekviena OpenGL programa yra susijusi su renderinimo kontekstu.
        <br>
        <br>
        </font></td>
        <td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
    </tr>
</table>

<pre>HGLRC           hRC=NULL;                          <font class="theme">// Nuolatinis renderinimo kontekstas</font>
HDC             hDC=NULL;                           <font class="theme">// Privatus GDI árenginio kontekstas</font>
HWND            hWnd=NULL;                          <font class="theme">// Laiko mûsø lango konteksta</font>
HINSTANCE       hInstance;                          <font class="theme">// Laiko programos instancija</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">
        Pirmoje eilutëje nustato masyvas kad mes stebësime pagrindinius paspaudimus klaviatûros.
         <br>
            Aktyvûs kintamasis bus naudojamas norint suþinoti savo programà,
        ar mûsø langas buvo sumaþintas iki minimalaus ar ne. <br>
            Jei mûsø programa neveikia fullscreen reþimu,
        fullscreen bus TRUE, jei mûsø programa neveikia lango reþimu,
        fullscreen bus FALSE. Svarbu, kad kiekviena procedûra þino,
        ar programa veikia fullscreen ar ne.
         </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>bool   keys[256];                              <font class="theme">// Masyvas naudojamas klaviatûros nustatymui</font>
bool    active=TRUE;                                <font class="theme">// Lango aktyvavimas TRUE pagal nutylëjimà</font>
bool    fullscreen=TRUE;                            <font class="theme">// Pilno ekrano nustatymas pagal nutylëjimà</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">
            Dabar turime deklaruoti WndProc (). Todël mes turime tai padaryti, nes
        CreateGLWindow () yra nuoroda á WndProc (), bet WndProc () atvyksta po
        CreateGLWindow ().
         </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>LRESULT    CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);               <font class="theme">// Deklaruojame WndProc</font>
</pre>


<pre>GLvoid ReSizeGLScene(GLsizei width, GLsizei height)                <font class="theme">// Pakeièiame dydá ir inicijuojam GL Window</font>
{
    if (height==0)                              <font class="theme">// Uþkirsti kelià atskirties nuliui</font>
    {
        height=1;                           <font class="theme">// Padaryti aukðtá, prilygstantá vienetui</font>
    }

    glViewport(0, 0, width, height);                    <font class="theme">// Perkrauti dabartinæ perþiûrà</font>
</pre>

<pre>   glMatrixMode(GL_PROJECTION);                        <font class="theme">// Pasirenkame projektà Matrix</font>
    glLoadIdentity();                           <font class="theme">// Perkrauname projektà Matrix</font>

    <font class="theme">// Apskaièiuojame kraðtiniø santyká langui</font>
    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

    glMatrixMode(GL_MODELVIEW);                     <font class="theme">// Pasirenkame Modelview Matrix</font>
    glLoadIdentity();                           <font class="theme">// Perkrauname Modelview Matrix</font>
}
</pre>

<pre>int InitGL(GLvoid)                             <font class="theme">// Visi OpenGL instaliavimai keliauja èia</font>
{
</pre>

<pre>   glShadeModel(GL_SMOOTH);                        <font class="theme">// Ájungti lygø spalvinimà</font>
</pre>

<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">
       
        <br>
        <br>
         </font></td>
        <td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
    </tr>
</table>

<pre>   glClearColor(0.0f, 0.0f, 0.0f, 0.0f);                   <font class="theme">// Juodas ekranas</font>
</pre>

<pre>   glClearDepth(1.0f);                         <font class="theme">// Buferio gylio nustatymas</font>
    glEnable(GL_DEPTH_TEST);                        <font class="theme">// Ájungia gylio testa</font>
    glDepthFunc(GL_LEQUAL);                         <font class="theme">// Gylio bandymo tipas</font>
</pre>
<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table30">
    <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>

<pre>   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);          <font class="theme">// Graþus perspektyvos skaièiavimas</font>
</pre>

<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table34">
    <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">Galiausiai mes graþiname
        TRUE.Jei norime suþinoti ar viskas ávyko tinkamai,tuomet patikriname kokia reikðmë buvo
            graþinama. TRUE teisingai, FALSE - klaidingai.
        </font></td>
        <td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
    </tr>
</table>

<pre>   return TRUE;                                <font class="theme">// Inicilizacija buvo gera</font>
}
</pre>

<pre>int DrawGLScene(GLvoid)                                <font class="theme">// Ðtai èia mes darome visà brëþiná</font>
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);         <font class="theme">// Iðvalome ekranà ir buferá</font>
    glLoadIdentity();                           <font class="theme">// Perkrauname dabartiná Modelview Matrix</font>
    return TRUE;                                <font class="theme">// Viskas ávykdyta gerai</font>
}
</pre>

<pre>GLvoid KillGLWindow(GLvoid)                            <font class="theme">// Tinkamai atjungiame langà</font>
{
</pre>

<pre>   if (fullscreen)                             <font class="theme">// Ar norite pilnà ekrano reþimà?</font>
    {
</pre>

<pre>       ChangeDisplaySettings(NULL,0);                  <font class="theme">// Jei taip, gráþkite á darbalauká</font>
        ShowCursor(TRUE);                       <font class="theme">// Rodyti pelës rodyklæ</font>
    }
</pre>

<pre>   if (hRC)                                <font class="theme">// Ar turime renderinimo kontekstà?</font>
    {
</pre>

<pre>       if (!wglMakeCurrent(NULL,NULL))                 <font class="theme">// Ar mes galime leisti The DC And RC konstekstà?</font>
        {
</pre>

<pre>           MessageBox(NULL,&quot;Release Of DC And RC Failed.&quot;,&quot;SHUTDOWN ERROR&quot;,MB_OK | MB_ICONINFORMATION);
        }
</pre>

<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table58">
    <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"> </font></td>
        <td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
    </tr>
</table>

<pre>       if (!wglDeleteContext(hRC))                 <font class="theme">// Ar mes leidþiame iðtrinti The RC?</font>
        {
</pre>


<pre>           MessageBox(NULL,&quot;Release Rendering Context Failed.&quot;,&quot;SHUTDOWN ERROR&quot;,MB_OK | MB_ICONINFORMATION);
        }
        hRC=NULL;                           <font class="theme">// Nustatome RC á NULL</font>
    }
</pre>

<pre>   if (hDC &amp;&amp; !ReleaseDC(hWnd,hDC))                    <font class="theme">// Ar leidþiame the DC</font>
    {
        MessageBox(NULL,&quot;Release Device Context Failed.&quot;,&quot;SHUTDOWN ERROR&quot;,MB_OK | MB_ICONINFORMATION);
        hDC=NULL;                           <font class="theme">// Nustatome DC á NULL</font>
    }
</pre>

<pre>   if (hWnd &amp;&amp; !DestroyWindow(hWnd))                   <font class="theme">// Ar leidþiame sunaikinti langà?</font>
    {
        MessageBox(NULL,&quot;Could Not Release hWnd.&quot;,&quot;SHUTDOWN ERROR&quot;,MB_OK | MB_ICONINFORMATION);
        hWnd=NULL;                          <font class="theme">// Nustatome hWnd á NULL</font>
    }
</pre>

<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table70">
    <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"> </font></td>
        <td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
    </tr>
</table>

<pre>   if (!UnregisterClass(&quot;OpenGL&quot;,hInstance))             <font class="theme">// Ar leisti neregistruotà klasæ?</font>
    {
        MessageBox(NULL,&quot;Could Not Unregister Class.&quot;,&quot;SHUTDOWN ERROR&quot;,MB_OK | MB_ICONINFORMATION);
        hInstance=NULL;                         <font class="theme">// Nustatome hInstance á NULL</font>
    }
}
</pre>

<pre>BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag)
{
</pre>

<pre>   GLuint      PixelFormat;                        <font class="theme">// Rezultatai po paieðkos</font>
</pre>

<pre>   WNDCLASS    wc;                         <font class="theme">// Lango klasës struktûra</font>
</pre>

<pre>   DWORD       dwExStyle;                      <font class="theme">// Lango iðplëstas stilius</font>
    DWORD       dwStyle;                        <font class="theme">// Lango stilius</font>
</pre>

<pre>   RECT WindowRect;                            <font class="theme">// Paima keturkampio virðaus kairës / apaèios deðinës reikðmes</font>
    WindowRect.left=(long)0;                        <font class="theme">// Nustatome kairá pavadinimà á 0</font>
    WindowRect.right=(long)width;                       <font class="theme">// Nustatome deðiná pavadinimà reikalingà plotá</font>
    WindowRect.top=(long)0;                         <font class="theme">// Nustatome virðûnës pavadinimaà á 0</font>
    WindowRect.bottom=(long)height;                     <font class="theme">// Nustatome mygtuko pavadinimà á reikalingà aukðtá</font>
</pre>

<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table88">
    <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"> </font></td>
        <td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
    </tr>
</table>

<pre>   fullscreen=fullscreenflag;                      <font class="theme">// Nustatome globaliná pilno ekrano reþimo vëliavà</font>
</pre>

<pre>   hInstance       = GetModuleHandle(NULL);            <font class="theme">//   Paima instancija mûsø langams</font>
    wc.style        = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;       <font class="theme">// Perpieðti pekëlimà ir DC langui</font>
    wc.lpfnWndProc      = (WNDPROC) WndProc;                <font class="theme">// WndProc þinutës</font>
    wc.cbClsExtra       = 0;                        <font class="theme">// Jokiø papildomø lango duomenø</font>
    wc.cbWndExtra       = 0;                        <font class="theme">// Jokiø papildomø lango duomenø</font>
    wc.hInstance        = hInstance;                    <font class="theme">// Nustatome pavyzdþiui</font>
    wc.hIcon        = LoadIcon(NULL, IDI_WINLOGO);          <font class="theme">// Laukiame standartiniø piktogramø</font>
    wc.hCursor      = LoadCursor(NULL, IDC_ARROW);          <font class="theme">//                              </font>
    wc.hbrBackground    = NULL;                     <font class="theme">// Nereikalaujame ekrano GL</font>
    wc.lpszMenuName     = NULL;                     <font class="theme">// Mes nenorime meniu</font>
    wc.lpszClassName    = &quot;OpenGL&quot;;                   <font class="theme">// Nustatome klasës vardà</font>
</pre>

<pre>   if (!RegisterClass(&amp;wc))                        <font class="theme">// Bandome registruoti langø klases</font>
    {
        MessageBox(NULL,&quot;Failed To Register The Window Class.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONEXCLAMATION);
        return FALSE;                           <font class="theme">// Uþdarome ir graþime FALSE</font>
    }
</pre>

<pre>   if (fullscreen)                             <font class="theme">// Bandome pilno ekrano reþimà?</font>
    {
</pre>

<pre>       DEVMODE dmScreenSettings;                   <font class="theme">// Árenginiai</font>
        memset(&amp;dmScreenSettings,0,sizeof(dmScreenSettings));       <font class="theme">// Uþtikrina atminties iðvalymà</font>
        dmScreenSettings.dmSize=sizeof(dmScreenSettings);       <font class="theme">// Dydis Devmode struktûros</font>
        dmScreenSettings.dmPelsWidth    = width;            <font class="theme">// Sekantis ekrano plotis</font>
        dmScreenSettings.dmPelsHeight   = height;           <font class="theme">// Sekantis ekrano aukðtis</font>
        dmScreenSettings.dmBitsPerPel   = bits;             <font class="theme">// Sekantis bitai per pikselá</font>
        dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT;
</pre>

<pre>       <font class="theme"></font>
        if (ChangeDisplaySettings(&amp;dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL)
        {
</pre>

<pre>           <font class="theme"></font>
            if (MessageBox(NULL,&quot;The Requested Fullscreen Mode Is Not Supported By\nYour Video Card. Use Windowed Mode Instead?&quot;,&quot;NeHe GL&quot;,MB_YESNO|MB_ICONEXCLAMATION)==IDYES)
            {
</pre>

<pre>               fullscreen=FALSE;               <font class="theme">// Pasirenkame lango dydá (Pilnas ekranas=FALSE)</font>
            }
            else
            {
</pre>

<pre>               <font class="theme"></font>
                MessageBox(NULL,&quot;Program Will Now Close.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONSTOP);
                return FALSE;                   <font class="theme">// Iðeiname ir graþiname FALSE</font>
            }
        }
    }
</pre>

<pre>   if (fullscreen)                             <font class="theme">// Ar pilno ekrano reþimà?</font>
    {
</pre>

<pre>       dwExStyle=WS_EX_APPWINDOW;                  <font class="theme">// Lango iðplëstinis stilius</font>
        dwStyle=WS_POPUP;                       <font class="theme">// Lango stilius</font>
        ShowCursor(FALSE);                      <font class="theme">// Paslëpta pelës rodyklë</font>
    }
    else
    {
</pre>

<pre>       dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;           <font class="theme">// Lango iðplëstinis stilius</font>
        dwStyle=WS_OVERLAPPEDWINDOW;                    <font class="theme">// Lango stilius</font>
    }
</pre>

<pre>   AdjustWindowRectEx(&amp;WindowRect, dwStyle, FALSE, dwExStyle);     <font class="theme">// Koreguojame lango teigiamà reikalaujamà dydá</font>
</pre>

<pre>   if (!(hWnd=CreateWindowEx(  dwExStyle,              <font class="theme">// Iðplëstinis stilius langui</font>
                    &quot;OpenGL&quot;,             <font class="theme">// Klasës pavadinimas</font>
                    title,                  <font class="theme">// Lango pavadinimas</font>
                    WS_CLIPSIBLINGS |           <font class="theme">// Reikalaujamas lango stilius</font>
                    WS_CLIPCHILDREN |           <font class="theme">// Reikalaujamas lango stilius</font>
                    dwStyle,                <font class="theme">// Pasirenkame lango stiliø</font>
                    0, 0,                   <font class="theme">// Lango pozicijà</font>
                    WindowRect.right-WindowRect.left,   <font class="theme">// Skaièiuojama lango plotis</font>
                    WindowRect.bottom-WindowRect.top,   <font class="theme">// Skaièiuojama lango aukðtá</font>
                    NULL,                   <font class="theme">// Nei langas</font>
                    NULL,                   <font class="theme">// Nei meniu</font>
                    hInstance,              <font class="theme">// Pavyzdys</font>
                    NULL)))                 <font class="theme">// Nekuriame WM_CREATE</font>
</pre>

<pre>   {
        KillGLWindow();                         <font class="theme">// Atnaujiname ekranà</font>
        MessageBox(NULL,&quot;Window Creation Error.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONEXCLAMATION);
        return FALSE;                           <font class="theme">// Graþiname FALSE</font>
    }
</pre>

<pre>   static  PIXELFORMATDESCRIPTOR pfd=                  <font class="theme">// pfd nurodo langà,kaip norimà dalykà</font>
    {
        sizeof(PIXELFORMATDESCRIPTOR),                  <font class="theme">// Dydis pikselio formato apibûdinimas</font>
        1,                              <font class="theme">// Versija skaièiø</font>
        PFD_DRAW_TO_WINDOW |                        <font class="theme">// Formatas tikriausiai palaiko langà</font>
        PFD_SUPPORT_OPENGL |                        <font class="theme">// Formatas tikriausiai palaiko OpenGL</font>
        PFD_DOUBLEBUFFER,                       <font class="theme">// Tikriausiai palaiko dvigubà buferá</font>
        PFD_TYPE_RGBA,                          <font class="theme">// Reikalauja RGBA formato</font>
        bits,                               <font class="theme">// Pasirenkame spalvos gylá</font>
        0, 0, 0, 0, 0, 0,                       <font class="theme">// Spalvos bitus ignoruojame</font>
        0,                              <font class="theme">// Ne Alpha buferá</font>
        0,                              <font class="theme">// Bito pamaina ignoruojama</font>
        0,                              <font class="theme">// Ne kaupimo buferá</font>
        0, 0, 0, 0,                         <font class="theme">// Kaupimo bitus ignoruojame</font>
        16,                             <font class="theme">// 16Bitø Z-buferis </font>
        0,                              <font class="theme">// Ne trafareto buferio</font>
        0,                              <font class="theme">// Ne pagalbinis buferis</font>
        PFD_MAIN_PLANE,                         <font class="theme">// Pagrindinë pieðimo sluoksnis</font>
        0,                              <font class="theme">// Rezervacija</font>
        0, 0, 0                             <font class="theme">// Sluoksniø kaukës ignoruojamos</font>
    };
</pre>

<pre>   if (!(hDC=GetDC(hWnd)))                         <font class="theme">// </font>
    {
        KillGLWindow();                         <font class="theme">// Atnaujiname ekranà</font>
        MessageBox(NULL,&quot;Can't Create A GL Device Context.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONEXCLAMATION);
        return FALSE;                           <font class="theme">// Graþiname FALSE</font>
    }
</pre>

<pre>   if (!(PixelFormat=ChoosePixelFormat(hDC,&amp;pfd)))             <font class="theme">// Ar lango pikseliø formatas ieðkomas?</font>
    {
        KillGLWindow();                         <font class="theme">// Atnaujiname ekranà</font>
        MessageBox(NULL,&quot;Can't Find A Suitable PixelFormat.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONEXCLAMATION);
        return FALSE;                           <font class="theme">// Graþiname FALSE</font>
    }
</pre>

<pre>   if(!SetPixelFormat(hDC,PixelFormat,&amp;pfd))               <font class="theme">// Ar leisti nustatyti pikseliø formatà?</font>
    {
        KillGLWindow();                         <font class="theme">// Atnaujiname ekranà</font>
        MessageBox(NULL,&quot;Can't Set The PixelFormat.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONEXCLAMATION);
        return FALSE;                           <font class="theme">// Graþiname FALSE</font>
    }
</pre>

<pre>   if (!(hRC=wglCreateContext(hDC)))                   <font class="theme">// Ar leisti perdirbimo sritá?</font>
    {
        KillGLWindow();                         <font class="theme">// Atnaujiname ekranà</font>
        MessageBox(NULL,&quot;Can't Create A GL Rendering Context.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONEXCLAMATION);
        return FALSE;                           <font class="theme">// Graþiname FALSE</font>
    }
</pre>

<pre>   if(!wglMakeCurrent(hDC,hRC))                        <font class="theme">// Mëginame aktyvuoti perdirbimo sritá</font>
    {
        KillGLWindow();                         <font class="theme">// Atnaujiname ekranà</font>
        MessageBox(NULL,&quot;Can't Activate The GL Rendering Context.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONEXCLAMATION);
        return FALSE;                           <font class="theme">// Graþiname FALSE</font>
    }
</pre>

<pre>   ShowWindow(hWnd,SW_SHOW);                       <font class="theme">// Rodomas langas</font>
    SetForegroundWindow(hWnd);                      <font class="theme">// Ðiek tiek didesnis prioritetas</font>
    SetFocus(hWnd);                             <font class="theme">// Nustatome klaviatûra langà</font>
    ReSizeGLScene(width, height);                       <font class="theme">// Nustatome tinkamiausá GL ekranà</font>
</pre>

<pre>   if (!InitGL())                              <font class="theme">// Inicilizuojame naujai sukurtà Gl langà</font>
    {
        KillGLWindow();                         <font class="theme">// Atnaujiname ekranà</font>
        MessageBox(NULL,&quot;Initialization Failed.&quot;,&quot;ERROR&quot;,MB_OK|MB_ICONEXCLAMATION);
        return FALSE;                           <font class="theme">// Graþiname FALSE</font>
    }
</pre>
<
<pre>   return TRUE;                                <font class="theme">// Ávykdyta</font>
}
</pre>

<pre>LRESULT CALLBACK WndProc(  HWND    hWnd,                   <font class="theme"> </font>
                UINT    uMsg,                   <font class="theme">// Þinutë ðitam langaui</font>
                WPARAM  wParam,                 <font class="theme">// Prideda þinutës informacija</font>
                LPARAM  lParam)                 <font class="theme">// Pridedama þinutës informacijà</font>
{
</pre>

<pre>   switch (uMsg)                               <font class="theme">// Tikrinama lango þinutës</font>
    {
</pre>

<pre>       case WM_ACTIVATE:                       <font class="theme">// Rodoma lango aktyvavimo þinutë</font>
        {
            if (!HIWORD(wParam))                    <font class="theme">// Tikrinama sumaþinimo bûsena</font>
            {
                active=TRUE;                    <font class="theme">// Programà yra aktyvi</font>
            }
            else
            {
                active=FALSE;                   <font class="theme">// Programa nebeveikia</font>
            }

            return 0;                       <font class="theme">// Graþiname þinute</font>
        }
</pre>

<pre>       case WM_SYSCOMMAND:                     <font class="theme">// Sistemos komandos</font>
        {
            switch (wParam)                     <font class="theme">// Tikrinama sistemas</font>
            {
                case SC_SCREENSAVE:             <font class="theme">// Ekrano uþklanda mëgina startuoti?</font>
                case SC_MONITORPOWER:               <font class="theme">// Monitorius mëgina ávesti energijos taupymà?</font>
                return 0;                   <font class="theme"></font>
            }
            break;                          <font class="theme">// Iðeiname</font>
        }
</pre>

<pre>       case WM_CLOSE:                          <font class="theme">// Ar gausime uþdarymo þinutæ?</font>
        {
            PostQuitMessage(0);                 <font class="theme">// Siunèiama uþdarymo þinutë</font>
            return 0;                       <font class="theme">// Einame atgal</font>
        }
</pre>


<pre>       case WM_KEYDOWN:                        <font class="theme">// Ar raktaþodþiai leidþiasi zemyn?</font>
        {
            keys[wParam] = TRUE;                    <font class="theme">// Jei taip, þymëti TRUE</font>
            return 0;                       <font class="theme">// Einame atgal</font>
        }
</pre>

<pre>       case WM_KEYUP:                          <font class="theme">// Ar raktaþodis buvo iðleistas?</font>
        {
            keys[wParam] = FALSE;                   <font class="theme">// Jei taip, tai þymime FALSE</font>
            return 0;                       <font class="theme">// Einame atgal</font>
        }
</pre>

<pre>       case WM_SIZE:                           <font class="theme">// Perdaromas OpenGL lango dydis</font>
        {
            ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));       <font class="theme">// LoWord=Width, HiWord=Height</font>
            return 0;                       <font class="theme">// Einame atgal</font>
        }
    }
</pre>

<pre>   <font class="theme"></font>
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
</pre>

<pre>int WINAPI WinMain(    HINSTANCE   hInstance,              <font class="theme">// Pavyzdys</font>
            HINSTANCE   hPrevInstance,              <font class="theme">// Ankstesnis pavyzdys</font>
            LPSTR       lpCmdLine,              <font class="theme">// Linijos komandø parametrai</font>
            int     nCmdShow)               <font class="theme">// Rodomo lango bûsena</font>
{
</pre>

<pre>   MSG msg;                                <font class="theme">// Lango þinutës struktûra</font>
    BOOL    done=FALSE;                         <font class="theme">// Bool kintamasis á iðëjimà</font>
</pre>

<pre>   <font class="theme">// Klausti vartotojo, kurá lango reþimà rinksis</font>
    if (MessageBox(NULL,&quot;Ar tu mëgsti pilno reþimo ekranà?&quot;, &quot;Pradëti pilno ekrano reþimà?&quot;,MB_YESNO|MB_ICONQUESTION)==IDNO)
    {
        fullscreen=FALSE;                       <font class="theme">// Lango reþimas</font>
    }
</pre>

<pre>   <font class="theme">// Sukurtas OpenGL langas</font>
    if (!CreateGLWindow(&quot;NeHe's OpenGL Framework&quot;,640,480,16,fullscreen))
    {
        return 0;                           <font class="theme">// Iðeiname jei nebuvo sukurtas pilno ekrano reþimas</font>
    }
</pre>

<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table199">
    <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 is
        the start of our loop. As long as done equals FALSE the loop will keep
        repeating. </font></td>
        <td class="r"><img alt="" src="vaizdai/blank.gif" width="28" height="28"></td>
    </tr>
</table>

<pre>   while(!done)                                <font class="theme">//</font>
    {
</pre>

<pre>       if (PeekMessage(&amp;msg,NULL,0,0,PM_REMOVE))           <font class="theme">// Yra laukimo þinutë?</font>
        {
</pre>

<pre>           if (msg.message==WM_QUIT)               <font class="theme">// Turime graþinti iðëjimo þinutæ?</font>
            {
                done=TRUE;                  <font class="theme">// Jei taip  tada done=TRUE</font>
            }
            else                            <font class="theme">// Jei ne, tada spræsti lango þinutæ</font>
            {
</pre>

<pre>               TranslateMessage(&amp;msg);             <font class="theme">// Versti þinutæ</font>
                DispatchMessage(&amp;msg);              <font class="theme">// Iðsiøsti þinutæ</font>
            }
        }
        else                                <font class="theme">// Jei ten nëra þinuèiø</font>
        {
</pre>

<pre>           <font class="theme"></font>
            if (active)                     <font class="theme">// Programa aktyvi?</font>
            {
                if (keys[VK_ESCAPE])                <font class="theme">// Buvo paspaustas ESC ?</font>
                {
                    done=TRUE;              <font class="theme">// ESC signalo iðëjimas</font>
                }
                else                        <font class="theme">// Atnaujinamas ekranas</font>
                {
</pre>

<pre>                   DrawGLScene();              <font class="theme">// Pieðti vaizdà</font>
                    SwapBuffers(hDC);           <font class="theme">// Swap buferis</font>
                }
            }
</pre>

<pre>           if (keys[VK_F1])                    <font class="theme">// Spausti F1?</font>
            {
                keys[VK_F1]=FALSE;              <font class="theme">// Jei taip, tai raktas - FALSE</font>
                KillGLWindow();                 <font class="theme">// Naikinamas dabartinis langas</font>
                fullscreen=!fullscreen;             <font class="theme">// Pilno ekrano reþimas / Langoreþimas</font>
                <font class="theme">// Perkuriamas OpenGL langas</font>
                if (!CreateGLWindow(&quot;NeHe's OpenGL Framework&quot;,640,480,16,fullscreen))
                {
                    return 0;               <font class="theme">// Iðeiti jei langas nebuvo sukurtas</font>
                }
            }
        }
    }
</pre>

<pre>   <font class="theme">                                    // Iðjungtii</font>
    KillGLWindow();                             <font class="theme">// Naikinti langà</font>
    return (msg.wParam);                            <font class="theme">// Uþdaryti programà</font>
}
</pre>

<table border="0" cellSpacing="0" cellPadding="0" width="100%" id="table223">
    <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"> <br>
        <br>
        <b>Jeff Molofee</b> (<b>NeHe</b>) <br>
        <br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/vc/lesson01.zip">Visual
        C++</a> Code For This Lesson. <br>
        <br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/asm/lesson01.zip">ASM</a>
        Code For This Lesson. ( Conversion by Foolman )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/bcb6/lesson01_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/lesson01.zip">BeOS</a>
        Code For This Lesson. ( Conversion by Rene Manqueros )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/c_sharp/lesson01.zip">C#</a>
        Code For This Lesson. ( Conversion by Joachim Rohde )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/csgl/lesson01.zip">VB.Net
        CsGL</a> Code For This Lesson. ( Conversion by X )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/cwarrior/lesson01.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/lesson01.tar.gz">
        Cygwin</a> Code For This Lesson. ( Conversion by Stephan Ferraro )<br>
        * DOWNLOAD <a href="http://nehe.gamedev.net/data/lessons/d/lesson01.zip">
        D Language</a> Code For This Lesson. ( Conversion by Familia Pineda
        Garcia )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/delphi/lesson01.zip">
        Delphi</a> Code For This Lesson. ( Conversion by Michal Tucek )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/devc/lesson01.zip">Dev C++</a>
        Code For This Lesson. ( Conversion by Dan )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/gameglut/lesson01.zip">
        Game GLUT</a> Code For This Lesson. ( Conversion by Milikas Anastasios )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/irix/lesson01.zip">Irix</a>
        Code For This Lesson. ( Conversion by Lakmal Gunasekara )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/java/lesson01.zip">Java</a>
        Code For This Lesson. ( Conversion by Jeff Kirby )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/java_swt/lesson01.zip">
        Java/SWT</a> Code For This Lesson. ( Conversion by Victor Gonzalez )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/jogl/lesson01.jar">JoGL</a>
        Code For This Lesson. ( Conversion by Kevin J. Duling )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/lccwin32/lccwin32_lesson01.zip">
        LCC Win32</a> Code For This Lesson. ( Conversion by Robert Wishlaw )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/linux/lesson01.tar.gz">
        Linux</a> Code For This Lesson. ( Conversion by Richard Campbell )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/linuxglx/lesson01.tar.gz">
        Linux/GLX</a> Code For This Lesson. ( Conversion by Mihael Vrbanec )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/linuxsdl/lesson01.tar.gz">
        Linux/SDL</a> Code For This Lesson. ( Conversion by Ti Leggett )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/lwjgl/lesson01.jar">LWJGL</a>
        Code For This Lesson. ( Conversion by Mark Bernard )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/mac/lesson01.sit">Mac OS</a>
        Code For This Lesson. ( Conversion by Anthony Parker )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/macosxcocoa/lesson01.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/lesson01.zip">MASM</a>
        Code For This Lesson. ( Conversion by Nico (Scalp) )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/pbasic/lesson01.zip">Power
        Basic</a> Code For This Lesson. ( Conversion by Angus Law )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/pelles_c/lesson01.zip">
        Pelles C</a> Code For This Lesson. ( Conversion by Pelle Orinius )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/perl/lesson01.zip">Perl</a>
        Code For This Lesson. ( Conversion by Cora Hussey )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/python/lesson01.tar.gz">
        Python</a> Code For This Lesson. ( Conversion by John Ferguson )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/scheme/lesson01.zip">
        Scheme</a> Code For This Lesson. ( Conversion by Jon DuBois )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/solaris/lesson01.zip">
        Solaris</a> Code For This Lesson. ( Conversion by Lakmal Gunasekara )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/vb/lesson01.zip">Visual
        Basic</a> Code For This Lesson. ( Conversion by Ross Dawson )<br>
        * DOWNLOAD
        <a href="http://nehe.gamedev.net/data/lessons/vfortran/lesson01.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/lesson01.zip">
        Visual Studio .NET</a> Code For This Lesson. ( Conversion by Grant James
        )<br>
&nbsp;</font></td>
    </tr>
</table>

</body>

</html>
 

Compare with Previous | Blame | View Log