V tomto článku se pokusíme implementovat snadno použitelnou třídu kamery, která bude vhodná pro pohyby v obecném 3D světě, například pro nějakou střílečku - myš mění směr natočení a šipky na klávesnici zajišťují pohyb. Přestože budeme používat maličko matematiky, nebojte se a směle do čtení!
Možno ste už počuli o výškových mapách. Sú to také čiernobiele obrázky, pomocou ktorých sa vytvára 3D terén (výška terénu na určitej pozícii je určená farbou zodpovedajúceho bodu na výškovej mape). Najjednoduchšie je výškovú mapu načítať zo súboru a je pokoj. Sú však situácie, ako napr. keď robíte grafické demo, ktoré má byť čo najmenšie, keď príde vhod výškovú mapu vygenerovať procedurálne. Takže si ukážeme ako na to. Ešte snáď spomeniem že čítať ďalej môžu aj tí, ktorí chcú vedieť ako vygenerovať takzvané "oblaky" (niekedy sa tomu hovorí aj plazma), nakoľko tento tutoriál bude z veľkej časti práve o tom.
Každý, kdo někdy programoval částicové systémy, se jistě setkal s problémem, jak zařídit, aby byly polygony viditelné z jakéhokoli směru. Nebo-li, aby se nikdy nestalo, že při natočení kamery kolmo na rovinu částice, nebyla vidět pouze tenká linka. Složitý problém, ultra jednoduché řešení...
Chcete používat ve svých programech FreeType Fonty i s českými znaky? Pokud ano, jste na správném místě. Tento článek doplňuje NeHe Tutoriál 43, ve kterém bylo popsáno použití FreeType s OpenGL, ale bohužel bez českých znaků. Použito s laskavým svolením http://programovani.wz.cz/.
V tomto článku si ukážeme, jak nahrát a vykreslit model ve formátu .3DS (3D Studio Max). Náš kód bude umět bez problémů načítat soubory do třetí verze programu, s vyššími verzemi bude pracovat také, ale nebude podporovat jejich nové funkce. Vycházím z ukázkového příkladu z http://www.gametutorials.com/, kde také najdete zdrojové kódy pro C++ (článek je v Delphi).
Tento článek popisuje vytvoření OpenGL okna pod operačním systémem MS Windows ve vývojovém prostředí Borland Delphi. Já osobně používám Delphi verze 7, ale ani v nižších verzích by neměl být problém vytvořený kód zkompilovat a spustit. Z větší části se jedná o přepis prvního NeHe Tutoriálu z jazyka C/C++ do Pascalu. Takže směle do toho...
Octree (octal tree, oktalový strom) je způsob rozdělování 3D prostoru na oblasti, který umožňuje vykreslit pouze tu část světa/levelu/scény, která se nachází ve výhledu kamery, a tím značně urychlit rendering. Může se také použít k detekcím kolizí.
Pokud budete někdy potřebovat pro svou aplikaci vygenerovat realisticky vypadající planetu, tento článek se vám bude určitě hodit - popisuje jeden ze způsobů vytváření nedeformovaných kontinentů. Obvyklé způsoby pokrývání koule rovinnou texturou končí obrovskými deformacemi na pólech. Další nevýhodou některých způsobů je, že výsledek je orientován v nějakém směru. To u této metody nehrozí.
Na emailu se mi některé, většinou začátečnické, dotazy neustále opakují, jako příklad lze uvést problémy s knihovnou GLAUX a symbolickou konstantou CDS_FULLSCREEN v Dev-C++. Doufám, že tato stránka trochu sníží zatížení, ale pokud si stále nevíte rady, nebojte se mi napsat. Doufám, že nebude vadit, když sem umístím i ten váš problém.
Když jsem přibližně před půl rokem (podzim 2003) přecházel z MS Windows® na operační systém Linux, měl jsem relativně velké potíže se zprovozněním OpenGL. Nejedná se sice o nic složitého, nicméně pro tehdy nic nechápajícího Woqa uživatele (analogie na Frantu uživatele :-) to byl naprosto neřešitelný problém.
Chcete si naprogramovat letecký simulátor? Směr letu nad krajinou můžete měnit klávesnicí i myší... Vytvoříme několik užitečných tříd, která vám pomohou s matematikou, která stojí za definováním výhledu kamery a pak všechno spojíme do jednoho funkčního celku.
V tomto článku se dozvíte, jakým způsobem OpenGL ukládá hodnoty rotací a translací do své modelview matice. Samozřejmě nebudou chybět obrázky jejího obsahu po různých maticových operacích.
Zajímali jste se někdy o to, jak fungují OpenGL funkce pracující s maticemi? V tomto článku si vysvětlíme, jak fungují funkce typu glTranslatef(), glRotatef(), glScalef() a jak je případně nahradit vlastním kódem.
Potřebujete transformovat pozici myši na souřadnice v OpenGL scéně a nevíte si rady? Pokud ano, jste na správném místě.
Představte si, že děláte nějaký velký dynamický svět, pro který potřebujete mnoho výpočtů závislých na uplynulém čase (pohyb, rotace, animace, fyzika). Pokud synchronizujete klasicky pomocí FPS, neobejdete se při každém vykreslení bez spousty dělení. Základem všeho je, tyto operace provádět co nejméně, abychom zbytečně nezatěžovali procesor.
Víte, vzpomněl jsem si na své začátky s OpenGL, kdy člověk nemohl sehnat téměř žádné informace o OpenGL, jednoduše proto, že žádné neexistovaly. To byl vlastně důvod pro překlady NeHe Tutoriálů a následný vznik tohoto webu. Informací je už nyní relativně dost, ale stále zůstala otázka: Kde začít?
FPS je zkratka z počátečních písmen slov Frames Per Second, která by se dala do češtiny přeložit jako počet snímků za sekundu. Tato tři písmena jsou spásou při spouštění programů na různých počítačích. Vezměte si hru, kterou programátor začátečník vyvíjí doma na svém počítači o rychlosti, řekněme, Pentium II. Dá ji kamarádovi, aby se na ni podíval a zhodnotil. Kamarád má doma P4, spustí ji a vše je šíleně rychlé. Díky FPS se toto nikdy nestane, na jakémkoli počítači půjde hra vždy stejně rychle.
Článek popisuje vznik a principy OpenGL, základy práce s ním, OpenGL datové typy, proč funkce začínají gl a na jejich konci bývá 3f, jinde 3ub apod. a základní práci v OpenGL. Na konci naleznete několik ukázkových zdrojových kódů v GLUT a Win32 API a porovnání OpenGL s DirectX. Určitě si ho přečtěte, stojí za to. Původ: někde na internetu.
Tento článek by měl být shrnutím mých zkušeností s tvorbou počítačových her, mohl by usnadnit život začínajícím amatérským tvůrcům her a zejména programátorům. Podíváme se v něm na několik obecných věcí o hrách a pak se vrhneme na grafiku, klávesnici s myší a nakonec na čas. V každé části se pokusíme vytvořit nějaké příklady a na nich předvést o čem je řeč. 193.3 kB - text článku (PDF, TeX) + příklady.
V tomto článku si ukážeme, jak vytvářet komprimované OpenGL textury a jak za pomoci knihovny SDL_Image snadno načítat obrázky s alfa kanálem nebo v paletovém režimu. Třídu Picture jsem se snažil navrhnou tak, aby byla co nejjednodušší a dala se snadno použít v každém programu, zároveň díky SDL_Image poskytuje velké možnosti.
Určitě se vám nelíbí mít všechny textury uložené v BMP souborech, které nejsou zrovna přátelské k místu na disku. Bohužel SDL žádný jiný formát přímo nepodporuje. Nicméně existuje malé rozšíření v podobě knihovničky SDL Image poskytující funkci IMG_Load(), která umí načíst většinu používaných grafických formátů.
Woq mě požádal, abych napsal tutoriál pro používání OpenGL pod knihovnou SDL. Je to můj první tutoriál, takže doufám, že se bude líbit. Zkusíme vytvořit kód, který bude odpovídat druhé lekci "normálních" tutoriálů. Zdrojový kód je "oficiální" NeHe port druhé lekce do SDL. Pokusím se popsat, jak se vytváří okno a věci okolo.
Radomír Vrána mě požádal o radu, jak vypočítat průsečík dvou 2D přímek. Rozhodl jsem se, že mu místo obecných matematických vzorců pošlu rovnou kompletní C++ kód. Nicméně mi trochu přerostl přes hlavu, a tak vznikla kompletní třída přímky v obecném tvaru. Kromě průsečíku umí určit i jejich vzájemnou polohu (rovnoběžné, kolmé...), úhel, který svírají nebo vzdálenost libovolného bodu od přímky. Doufám, že tento můj drobný úlet nebude moc vadit :-]
Tento článek vychází z mých zápisků do matematiky z druhého ročníku na střední škole. Jo, na diktování byla Wakuovka vždycky dobrá... Tehdy jsem moc nechápal k čemu mi tento obor matematiky vůbec bude, ale když jsem se začal věnovat OpenGL, záhy jsem pochopil. Zkuste si vzít například nějaký pozdější NeHe Tutoriál. Bez znalostí 3D matematiky nemáte šanci. Doufám, že vám tento článek pomůže alespoň se základy a pochopením principů.
Zobrazíme dětské OpenGL okno v dialogu a budeme mu předávat hodnoty získané z ovládacích prvků (editboxy a radiobuttony). Periodické překreslování OpenGL okna zajišťuje zpráva WM_TIMER - trojúhelník a čtverec budou rotovat.
Obalení OpenGL třídami MFC nám dovolí využít obou výhod API: rychlého vykreslování a elegantního rozhraní. Nicméně díky faktu, že mnoho ovladačů tiskáren nepracuje s API funkcí SetPixelFormat(), není možné tisknout OpenGL scénu přímo na tiskárnu. Velmi rozšířená technika je vykreslit OpenGL scénu do DIBu a poté ji zkopírovat do DC pro tisk nebo náhled. V tomto článku uvidíte jak to udělat.
Občas potřebujeme sejmout obrazovku v OpenGL a poté s ní pracovat jako s obyčejnou bitmapou. V tomto článku vám ukáži získání obsahu OpenGL okna a jeho uložení do DIBu ve formě nekomprimované bitmapy. Jediný omezením může být 24 bitová barevná hloubka obrazovky.
Už dávno jsem si chtěl naprogramovat vlastní šetřič obrazovky. Měl jsem sice třídu CScreenSaverWnd pro MFC, ale ta nepodporovala OpenGL. U NeHe Tutoriálu 38 jsem našel odkaz na šetřič obrazovky s podporou OpenGL, který napsal Brian Hunsucker. Chtěl bych mu poděkovat, protože na jeho zdrojovém kódu z větší části staví tento článek.