|
[Grafika]
[WebTip]
[Fotografování]
[Galerie]
[MujMac]
[Printing]
|
|||||||||
|
|
||||||||||
|
|
|||||||||
|
Rotace objektůVítejte u druhého dílu povídání o OpenGL. Dnešní díl má název - Rotace objektů Velice důležitým prvkem práce s prostorem po transformaci je rotace objektu. Provádí se obdobným způsobem jako transformace. Vezmeme počátek souřadnic a pootočíme ho podle některé ze souřadných os X,Y,Z o určitý úhel (viz obrázek):
Rotace počátku se provádí funkcí glRotatef(uhel, 0.0f,1.0f, 0.0f); Jak už první parametr napovídá, bude se jednat o úhel, o který chceme otáčet. Další parametry představují hodnoty x, y, z. Jsou to vektory od 0 do x, od 0 do y, od 0 do z. Takže zadáme-li hodnotu za x, budeme objekt podle osy x proti směru hodinových ručiček. Pokud zadáme hodnotu do y budeme rotovat objekt kolem osy y a nakonec pokud zadáme hodnotu do z, pootočíme s objektem kolem osy z.
Samozřejmě to lze kombinovat, takže pokud zadáme hodnotu do x i do y, tak se počátek pootočí zároveň kolem osy x, a zároveň kolem osy y. Zkuste si přiložený příklad. Narýsovaly jsme souřadné osy x, y, z a na osy xy jsme narýsovali obdelník. Vše ve trojím vyhotovení , pokaždé pootočené o jiný úhel . První není pootočen o žádný úhel. Druhý je pootočen o 30 stupňů podle osy x a třetí o 30 stupňů podle osy y.
Při každém kreslení obrazce nejprve vyresetujeme pohled na 0,0,0 posuneme počátek a otočíme o 30 stupňů. Jistě jste si už všimli, že při rotaci neotáčíme narýsovaným objektem, ale rotujeme počátek souřadnic (podobně jako glTranslatef). Z toho vyplívají velké možnosti pro manipulaci s objekty. V prvé řadě to znamená, že nemusíme otáčet pouze jedním objektem, ale dvěmi, třemi nebo celou scénou . No a za druhé podle toho, jak umístíme objekt do souřadného sytému, bude se otáčet. Například kolem své osy nebo kolem určitého bodu po kružnici. Poznámka: OpenGL nenabízí konstrukci kružnice. A to pomocí funkcí sinus či kosinus. Hladkost kružnice je dána velikostí kroku ve stupních. Typ čáryJistě jste si všimli, že jednotlivé obdelníky v prvním
příkladu jsou každé jinou čárou. Jak tedy na to? Velmi jednoduše. Nejprve aktivujeme
používání různých druhů čar:
Tím se dostáváme k dalšímu příkladu, který je na stejné kopyto a uvádím ho jen pro názornost. jde o kvádr narýsovaný ze šesti obdelníkových stěn (kvádr jako samostatné těleso se podíváme v některém z dalších dílů). Kvádrem rotujeme pomocí voleb v menu.
Malý bonus na závěrA pokračujeme vesele dál. Téma dnešního dílu už jsme vyčerpali, přesto se ještě podíváme na další způsob jak vytvořit OpenGL aplikaci a to sice jako čistou win32. Využijeme to do budoucna v dalších dílech seriálu a také je tento způsob použitelný také pro jiné překladače než C++ Builder. O co půjde? Naprogramujeme několik grafů funkcí ve tvaru z = f(x, y). Berte to spíše jako zajímavost, pro tentokrát bych netlačil příliš na pilu.
Program si stáhněte ve dvou verzích. Klasicky jak už jsme zvyklí a jako win32 aplikaci. Na první pohled poznáte rozdíl ve vykreslování. Zatímco jsme překreslování obrazu dosud vynucovali funkcí Invalidate();, mělo to za následek drobné vady na obrazu. Nyní použijeme tzv. double-buffering a překreslování bude naprosto čisté. Popišme si jak to celé funguje. Jak už jsem napsal, jedná se o aplikaci win32. Zajím-li vás, jak se dělají win32 aplikace, podívejte se zde. První věc, kterou nesmíme zapomenout je
vložit k programu knihovnu glaux.lib
To jest, když je stisknuta některá klávesa, zaregistruje
se do pole V dalším díle se podíváme na světla, osvětlování objektů a letmo na knihovnu glut. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||