OpenGL v Delphi4



Ořezávání scény, která je za kamerou, pomocí příkazu 'glClipPlane'

Příkaz 'glDrawElements' - urychlení překreslování scény

FullScreen



Příklad a zdroják ke stažení (720k)



Ořezávání scény, která je za kamerou, pomocí příkazu 'glClipPlane'

Pro ořezávání scény, která je za kamerou, jsem použil příkaz 'glClipPlane', kterou jsem popisoval v předešlém příkladu. Akorát jsem přidal příkaz pro rotaci řezu, aby řez rotoval podle rotace kamery. Když kamerou otočíte směrem nahoru 'klávesa Home', nebo dolu 'klávesa End' ,můžete se přesvědčit, jestli se opravdu ořezává vše za vámi. Jinak scénou můžete procházet pomocí šipek. Ořezávání by vás mělo následovat.

Nejdříve nadefinujem typy a proměnné.

type
TPlane = record
x: double;
y: double;
z: double;
a: double;
end;
...........

var
Plane : TPlane;
.............


Teď jsem přidal pár nových příkazů.

glPushMatrix; - protože budeme rotovat řezem, musíme definici řezu uzamknout mezi 'glPushMatrix' a 'glPopMatrix', aby nám místo řezu, nerotovala nepředvídatelně scéna.
glRotatef(-UhelY+180,0,1,0); - tady je ta rotace řezu. UhelY - je úhel rotace kamery a ty šílenosti kolem, '- ... +180', jsou tam proto, abych řez hodil za kameru.
Plane.x := 0;
- pozice 'X'
Plane.y := 0;
- pozice 'Y'
Plane.z := Z;
- pozice 'Z' kamery. Řez se tvoří od této pozice.
Plane.a := 1;
- pozice 'Alfa'
glEnable(GL_CLIP_PLANE0); - funkce zapne ořezávání objektů. GL_CLIP_PLANE0 - může se aktivovat více řezů (GL_CLIP_PLANE0) až (GL_CLIP_PLANE5).
glClipPlane(GL_CLIP_PLANE0, @Plane);


No a tady můžete mrknout na kus zdrojáku.





'glDrawElements' - urychlení překreslování scény

Funkci 'glDrawElements' jsem už popisoval, ale byl to jen jednoduchý příklad. Teď jsem zkusil udělat malou, dalo by se říct, místnost.

Nadefinujem typy a proměnné.
Teď načteme textury, pole bodů, pole texturové koordinace a pole indikátorů. Proceduru stačí volat jen jednou.
A nakonec budeme v nekonečné smyčce volat tuto proceduru.




FullScreen

Nebudu se moc rozepisovat. Do fullscreenu se aplikace přepne pomocí této procedury. Pak stačí volat například 'SetFullScreen(640,480,16);' a aplikace se přepne do rozlišení '640x480 16b'. V tomto příkladu zapnete 'FullScreen' klávesou 'Enter'. Před ukončením aplikace nezapomeňte volat proceduru 'RestoreMode;', která vrátí původní nastavení obrazovky.




glClipPlane - Řez objektem Detekce kolizí
Home