|
11. Úvod do OpenGL |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Na prednáške:
Zdroje:
Trocha matematiky
Lineárna transformácia sa dá popísať pomocou matice s rozmermi 4x4. Súradnice transformovaného bodu sa potom vypočítajú:
Nový = Matica * Bod
Zmena veľkosti:
( x 0 0 0 ) 0 y 0 0 0 0 z 0 0 0 0 1
Otočenie:
( * * * 0 ) * * * 0 * * * 0 0 0 0 1
Posunutie:
( 1 0 0 x ) 0 1 0 y 0 0 1 z 0 0 0 1
Matice v OpenGL
Ako zmeniť maticu transformácie objektu:
var |
OpenGL používa 3 druhy matíc, práca s niektorou z nich sa zapína pomocou funkcie glMatrixMode:
Ak sme pomocou funkcie
glMatrixMode( ... ) vybrali
maticu, môžeme s ňou ďalej pracovať:
glLoadMatrixF( ...
)
glLoadIdentity ... nastaví maticu na
jednotkovú
Transformácie môžeme skladať pomocou operácie
súčin matíc:
glMulMatrixF(@M)
... vynásobí maticu s maticou M
Pre jednoduché transformácie nemusíme sami zostavovať maticu a volať
takéto násobenie. Stačí, ak použijeme funkcie:
glTranslate(dX, dY, dZ)
glRotate(Uhol, nX, nY, nZ)
glScale(X, Y, Z)
Ak chceme bod otočiť o 45° a
potom posunúť o vektor (0, 0, 0, -5):
glLoadIdentity;
glTranslate(0, 0, -5);
glRotate(45, 0, 0, 1);
Všimnite si, že obrátené poradie volania funkcií, ktoré vytvoria výslednú
maticu transformácie T * R ( T je označenie pre maticu
posunutia, ktorú použila funkcia glTranslate
a R je označenie matice otočenia, ktorú použila funkcia
glRotate). Súradnica nového, transformovaného bodu sa potom vypočíta zo
súčinu: ( T * R ) * Bod = T
* ( R * Bod ) - vidíme, že bod sa naozaj najskôr otočí a až
potom posunie.
Inicializovanie
var |
Kreslenie jednoduchej scény
procedure
TForm1.Button1Click(Sender: TObject); |
Animácia pomocou časovača:
var procedure
TForm1.Timer1Timer(Sender: TObject); |
Komplikovanejší útvar - kocka:
const |
Mapovanie textúry
Textúra musí byť s rozmery 2n * 2n:
var
Tex: array[0..255, 0..255] of record
R, G, B: Byte;
end;
for Y:=0
to 255 do |
Použitie:
procedure
TForm1.Timer1Timer(Sender: TObject); |
© 2003 Ľubomír SALANCI