Jei kam nors kyla problemos su pilnaekraniu režimu, pamėginkite sumažinti lango grafiką, nes skirtingi kompiuteriai skirtingai reaguoja į tai. problema dažnai slypi tvarkyklėse (angl. drivers), čia jau neginčytinas minusas.

Kaip jau žinoma, dažniausiai naudojamas žaidimuose. Koks žaidimų privalumas? Jo eigą lemia vartotojas, o ne kompiuteris. Būtų neįdomu, jeigu mašinos pačios lenktyniautų, kareiviai patys vieni kitus šaudytų. Tai jau būtų multiplikacinis filmas. Taigi, svarbu žaidimo kontrolę (jos dalį) perleisti vartotojui, t.y. leisti jam valdyti objektus klaviatūros arba pelės pagalba. Dirbti su klaviatūra paprasčiau, todėl aš jums parodysiu dar vieną pavyzdį.

Pradėkime nuo kodo. Iš pradžių reikia papildyti globaliųjų kintamųjų sąrašą.

  Mode      : Cardinal = GL_FILL;
  X         : glFloat = 0.0;
  Y         : glFloat = 0.0;
  Z         : glFloat = -50.0;
  AngleX    : glFloat = 0.0;
  AngleY    : glFloat = 0.0;
  AngleZ    : glFloat = 0.0;

Mode atsakingas už figūros vaizdavimo stilių. X, Y ir Z – postūmis duotomis ašimis. AngleX, AngleY, AngleZ – posūkis duotais kampais bei duotomis ašimis. Pakeiskime procedūrą Render.

http://pixel.paste.lt/paste/609b6a4f4c20760342a7d58e33080781

glPolygonMode nustatys figūros vaizdavimą vartotojo pasirinktu stiliumi. Ekrano viduryje pavaizdavau trikampį ir dvi tieses, kad būtų matyti, jog lange tikrai erdvė, o ne plokštuma. DrawGL funkcija beveik nesikeičia.

function DrawGL(): Bool;
begin
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 glLoadIdentity;
 glTranslatef(0.0, 0.0, -20.0);
 Render;
 DrawGL:= True;
end;

Tiesiog visa scena atitraukiama 20 vienetų nuo žiūrovo. Pridėkime dar vieną procedūrą, kurioje mes nustatysim, ką darys programa, kai bus nuspaustas vienas ar kitas mygtukas.

http://pixel.paste.lt/paste/587ed217c4356b805eb7311339d9c2d0

Taigi mygtukas Q artins objektą, mygtukas Z jį tolins (kai mėginsit programą, visų pirma juos ir išmėginkit). Mygtukai W, A, S, D judina objektą į skirtingas puses. Rodyklės bei mygtukai Delete ir End sukinėja objektą. Dabar reikia šią procedūrą pridėti lango procedūroje, žinutės WM_KeyDown apdorojime, po eilute Keys[wParam]:= True.

  WM_KeyDown:
    begin
     Keys[wParam]:= True;
     KeyDown;
     Result:=0;
    end;

Štai ir viskas. “Paskraidę” su trikampiu išmėginkite ir mygtuką M, kad pamatytumėt kokie stiliai gali būti.

Jeigu vietoj trikampio pavaizduotumėt, tarkim, lėktuvėlį arba skraidančią lėkštę, tai jau būtų pusiau realus žaidimas (tik be pabaigos). Antroje straipsnio “Žingsnis į naują pasaulį” dalyje viskas buvo automatizuota, o dabar programos eigą kontroliuoja vartotojas. Tačiau viską sujungus galima gauti nuostabius efektus ir daug galimybių, bet tai jau reikalauja didelių pastangų ir daug darbo.

O štai jums dar vienas nuostabus efektas. Nupieškime dar vieną trikampį už jau esamo su keliomis papildomomis funkcijomis.

glColor4f(1.0, 1.0, 0.0, 0.5);
glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glBegin(GL_TRIANGLES);
 glVertex3f(0.0, 1.0, -0.2);
 glVertex3f(-1.0, -1.0, -0.2);
 glVertex3f(1.0, -1.0, -0.2);
glEnd;
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);

Paleiskite programą. Pritraukite trikampius Q mygtuko pagalba, kad būtų beveik per visą ekraną. Dabar pasukite trikampius rodyklės Up arba Down pagalba. Jie permatomi!

Permatomumas

Kurdami langą, o tiksliau – nustatinėdami pikselio formatą mes nurodėme, kad būtų palaikomos RGBA spalvos, t.y. raudona, žalia, mėlyna ir alfa (aplha). Spalva Alpha yra permatomumas. Vienetas reiškia visišką nepermatomumą, o nulis – atvirkščiai.

glColor4f aš naują trikampį ne tik padariau geltonu, bet ir nustačiau permatomumą. Dabar jis permatomas pusiau. Tam dar reikėjo pareguliuoti kelis parametrus naujomis funkcijomis, į kurias kol kas nesigilinsime. Galite pasidaryt, kad permatomumas būtų įjungiamas ir išjungiamas, tarkim, mygtuko B pagalba. Tam tiesiog reikėtų papildyti KeyDown procedūrą keliomis eilutėmis.

Žinoma, galimybės čia nesibaigia. Net atvirkščiai: kuo toliau, tuo įdomiau. Bet tai jau reikalauja nemažų žinių.
Tikiuosi straipsnis (tiksliau visa trilogija) bus kam nors naudingas.

Panašūs straipsniai


Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.