Obsah:
Trochu podrobněji si představíme grafickou knihovnu OpenGL, a příklad kódu používajícího pevnou renderovací pipeline. Zběžně se podíváme na obdobný kód i v Dirext3D 9.
Pokud vás zajímají detaily (shadery, lingebra pro grafiku ...) tak doporučuji slidy k předmětu Hardware pro počítačovou grafiku
Homepage OpenGL na které najdete nepostradatelnou dokumentaci. Hlavně:
Důležité pojmy: OpenGL pipeline, client/server architektura OpenGL, grafická primitiva, Vertex Arrays, Vertex Buffer Objects, Display Lists, buffery - color, depth, stencil, accumulation, GLU, GLUT, extensions (metody s koncovkou ARB).
Tutorialy
Dobrým zdrojem tutoriálů je NeHe, některé tutorialy jsou ale starší, funkcionalita kterou ukazují je v OpenGL i nadále, ale dá se dosáhnout jednodušeji (některá rozšíření se například časem stala součástí OpenGL).
Pozor: rozběhat NEHE projekty ve VS2008 není jen tak. Některé projekty načítající textury přes zastaralou knihovnu glaux potřebují novou implementaci procedury pro načítaní bitmap.
Matice, matice, matice
Pokud si chcete udělat pořádek v transformacích a maticích tak si přečtěte tyto FAQ.
Už jen stručně. Samply najdete v "DirectX Sample Browseru", zvolte Direct3D 9 a v menu Show zaškrtněte C++ a Tutorials, klikněte na "Install Project" u "Tutorial 5: Textures".
Na některých strojích jsou možná špatně nastavené cesty k hlavičkovým souborům a ke knihovnám DirectX. Pokud vám z tohoto důvodu projekt nepůjde zkompilovat tak přidejte postupujte následovně: Tool->Options->Projects and Solutions->VC++ Directories, do "Include files" přidejte $(DXSDK_DIR)\Include a do "Library files" $(DXSDK_DIR)\Lib\x86.
K čemu je engine dobrý?
Důležité pojmy z říše vykreslování 3D scén: Organizace prostoru - BSP stromy, Octrees, Portály; Visible-surface determination (VSD), Potentially visible sets (PVS)
Ogre3D je jeden z mnoha open source 3D enginů. Další velké enginy jsou například Irrlicht, Crystal Space 3D, Nebula Device a mnoho dalších.
Na co si dát u enginů pozor:
Co vše Ogre umí a jak se s ním pracuje - Manuál Ogre3D.Seznam scene managerů.
Ukázkový kód pro dnešní hodinu najdete v repository GamesLecture. Hlavní soubor tohoto solution najdete v \SpaceImpac\SpaceImpact.sln.
Cíl: Vytvořit složitější model a vyrenderovat ho naší aplikací.
Postup:
Cíl: Vytvořit v Blenderu složitější scénu a vyrenderovat ji v Ogre.
Postup obdobný jako minule:
OgreODE je wrapper pro fyzikální knihovnu ODE. API OgreODE je objektové (na rozdíl od API ODE, které je čistě v jazyku C, i když uvnitř knihovny se C++ také používá, zajímavý příběh ...) a drží se filosofie Ogre. Problémem je mizerná dokumentace. Jediným náznakem tutorialu je tato stránka na OGRE wiki. Nejvíce se toho člověk dozví z examplů v distribuci OgreOde.
Manuál ODE
Typická programová smyčka
Podíváme se na projekt Physic.
Homepage CEGUI
Cíl: Naklikat vlastní uživatelské rozhraní a použít ho v naší Ogre based aplikaci.
Pro rychlý úvod je nejlepší článek na Wikipedii. Detaily se dozvíme z referenčního manuálu.
Pár faktů:
Spustitelný interpret Luy najdete v adresáři \externalLibs\lua\bin.
Example projekt "LuaExample" nepoužívá přímo LUA C API, ale knihovnu Luabind, ta usnadňuje export C++ objektů do Luy a zpět.
Projekt má název Sounds. Podívejte se do kapitoly Introduction to OpenAL v programátorské příručce. Jsou tam shrnuty nejdůležitější pojmy celé knihovny. Náš example kromě OpenAL používá ALUT (OpenAL Utility Toolkit) pro inicializaci a načítání zvuků.
Opět existuje celá řada knihoven, většinou jsou ale komerční XAITMENT, AI-Implant. Free knihovny jsou zaměřeny spíše na výuku: FEAR, Pogamut (aneb proč je tu tak populární UT :-)
Knihovna OpenNeL
Nová iniciativa SUNu: Project DarkStar
Na většinu základních otázek najdete odpověď v FAQ - Multiplayer and Network Programming na serveru GameDev.net.
Různé algoritmy optimalizující datový přenos se dají odkoukat od konkurence.
FPS:
Quake 3 a Unreal.
RTS:
Age of Empires
Microsoft XNA (XNA creators club)
Popcap framework a příklady her na Popcap portálu.
Table of contents
Dopručené nástroje
- Microsoft Visual Studio 2008 - pokud ho ještě nemáte tak neváhejte a získejte ho legálně a zdarma díky MSDN Academic Alliance. Pokud nepotřebujete plnou verzi zkuste express edici.
- Kreslítko UML diagramů - Dia, Microsoft Visio (je součástí balíku MSDN Academic Alliance), online Gliffy nebo jakékoliv jiné.
- Doxygen - nástroj pro automatické generování dokumentace.
- Systém pro správu verzí - je skoro jedno jaký, ale nějaký mít musíte. Doporučuji SVN, další možnosti jsou CVS nebo SourceSafe. K SVN se vám bude hodit i grafická nadstavba TortoiseSVN.
Cvičení
8.10.2010 - Grafické knihovny OpenGL, Direct3D
Úvod
Trochu podrobněji si představíme grafickou knihovnu OpenGL, a příklad kódu používajícího pevnou renderovací pipeline. Zběžně se podíváme na obdobný kód i v Dirext3D 9.
Pokud vás zajímají detaily (shadery, lingebra pro grafiku ...) tak doporučuji slidy k předmětu Hardware pro počítačovou grafiku
OpenGL
Homepage OpenGL na které najdete nepostradatelnou dokumentaci. Hlavně:
- Programátorskou dokumentaci tzv. Redbook - Čtivý úvod do technologie. Číst jako první.
- Referenční dokumentaci tzv. Bluebook - Architektura a přehled všech funkcí. Hodí se když už víte, co chcete najít.
- Specifikaci - Obsahuje popis architektury, usecases a detailnější matematiku.
Důležité pojmy: OpenGL pipeline, client/server architektura OpenGL, grafická primitiva, Vertex Arrays, Vertex Buffer Objects, Display Lists, buffery - color, depth, stencil, accumulation, GLU, GLUT, extensions (metody s koncovkou ARB).
Tutorialy
Dobrým zdrojem tutoriálů je NeHe, některé tutorialy jsou ale starší, funkcionalita kterou ukazují je v OpenGL i nadále, ale dá se dosáhnout jednodušeji (některá rozšíření se například časem stala součástí OpenGL).
Pozor: rozběhat NEHE projekty ve VS2008 není jen tak. Některé projekty načítající textury přes zastaralou knihovnu glaux potřebují novou implementaci procedury pro načítaní bitmap.
- NeHe 02 - Kreslíme první trojůhelníček (windows message loop, otevření okna pro OpenGL, matice)
- NeHe 06 - Kostka s texturou (načtení textury do texturového objektu, přidání texturových koordinátů)
- NeHe 12 - Display listy (metaprogramování, reusabilita)
Matice, matice, matice
Model coordinates | -> | Eye coordinates | -> | Clip Coordinates | -> | Normalized Device Coordinates | -> | Window Coordinates |
... | ModelView | ... | Projection | ... |
Pokud si chcete udělat pořádek v transformacích a maticích tak si přečtěte tyto FAQ.
Direct3D
Už jen stručně. Samply najdete v "DirectX Sample Browseru", zvolte Direct3D 9 a v menu Show zaškrtněte C++ a Tutorials, klikněte na "Install Project" u "Tutorial 5: Textures".
Na některých strojích jsou možná špatně nastavené cesty k hlavičkovým souborům a ke knihovnám DirectX. Pokud vám z tohoto důvodu projekt nepůjde zkompilovat tak přidejte postupujte následovně: Tool->Options->Projects and Solutions->VC++ Directories, do "Include files" přidejte $(DXSDK_DIR)\Include a do "Library files" $(DXSDK_DIR)\Lib\x86.
15.10.2010 - Ogre a export z Blenderu, ODE, OgreOde
Ogre3D
K čemu je engine dobrý?
Důležité pojmy z říše vykreslování 3D scén: Organizace prostoru - BSP stromy, Octrees, Portály; Visible-surface determination (VSD), Potentially visible sets (PVS)
Ogre3D je jeden z mnoha open source 3D enginů. Další velké enginy jsou například Irrlicht, Crystal Space 3D, Nebula Device a mnoho dalších.
Na co si dát u enginů pozor:
- Je projekt ještě živý?
- Jak silná je komunita?
- Často nedostatečná dokumentace, odpozorovávat chování objektů jen z kódu není ono.
- Jak bude vypadat workflow? Existují konvertory pro převod modelů a animací do nativního formátu enginu? Jaké formáty jsou podporovány?
- Jak to bude s integrací dalších technologí? Fyzika, zvuky, GUI, ...
- Jaká je přesně licence? GPL, LGPL, Creative Commons, MIT ...
Co vše Ogre umí a jak se s ním pracuje - Manuál Ogre3D.Seznam scene managerů.
Ukázkový kód pro dnešní hodinu najdete v repository GamesLecture. Hlavní soubor tohoto solution najdete v \SpaceImpac\SpaceImpact.sln.
Import modelu
Cíl: Vytvořit složitější model a vyrenderovat ho naší aplikací.
Postup:
- Model vytvoříme v Blenderu - GUI Blenderu je poněkud nezvyklé, proto se nám bude hodit Quickstart guide
- Do Blenderu nainstalujeme exportovací plugin - Zkopírujte script z adresáře trunk\Tools\OgreExporter do blender\.blender\scripts. V Blenderu v okně "Scripts window" nezapomeňte zavolat "Update menus".
- Vyexportujeme ho do textového formátu *.mesh.xml - Scripts->Export->Ogre XML,
- Zkompilujeme do binárního formátu (*.mesh.xml -> *.mesh) utilitou \Tools\OgreCommandLineTools\OgreXmlConverter.exe
- Načteme a vyrenderujeme naším programem - projekt LoadMesh v solution \SpaceImpact\SpaceImpact.sln
Import scény
Cíl: Vytvořit v Blenderu složitější scénu a vyrenderovat ji v Ogre.
Postup obdobný jako minule:
- script najdete v adresáři trunk\Tools\blendersceneexporter
- Projekt pro načítání scény je LoadScene
ODE a OgreODE
OgreODE je wrapper pro fyzikální knihovnu ODE. API OgreODE je objektové (na rozdíl od API ODE, které je čistě v jazyku C, i když uvnitř knihovny se C++ také používá, zajímavý příběh ...) a drží se filosofie Ogre. Problémem je mizerná dokumentace. Jediným náznakem tutorialu je tato stránka na OGRE wiki. Nejvíce se toho člověk dozví z examplů v distribuci OgreOde.
Manuál ODE
Typická programová smyčka
Podíváme se na projekt Physic.
Příště
22.10. - CEGUI, Lua, OpenAL, Síťování
Uživatelské rozhraní - CEGUI
Homepage CEGUI
Cíl: Naklikat vlastní uživatelské rozhraní a použít ho v naší Ogre based aplikaci.
- Nejdříve si prohlédneme example projekt CEGui ze solution SpaceImpact.
- Editor layoutů je ve složce Tools\CELayoutEditor\ (můžete ho stáhnout i z oficiální stránky).
- Upravte stávající layout, např. přidejte tlačítko a v kódu si zaregistrujte handler pro toto tlačítko.
Scriptování - Lua
Pro rychlý úvod je nejlepší článek na Wikipedii. Detaily se dozvíme z referenčního manuálu.
Pár faktů:
- Lua má Garbage Collection
- Funkce jsou "first class objects"
- Kromě základních datových typů má Lua ještě typ "table"
- K tabulce můžeme přidat "metatable" definující její chování - takto se dá nad tabulkami z Luy dodefinot dědičnost jak ji známe z OO
Spustitelný interpret Luy najdete v adresáři \externalLibs\lua\bin.
Example projekt "LuaExample" nepoužívá přímo LUA C API, ale knihovnu Luabind, ta usnadňuje export C++ objektů do Luy a zpět.
3D Zvuky - OpenAL
Projekt má název Sounds. Podívejte se do kapitoly Introduction to OpenAL v programátorské příručce. Jsou tam shrnuty nejdůležitější pojmy celé knihovny. Náš example kromě OpenAL používá ALUT (OpenAL Utility Toolkit) pro inicializaci a načítání zvuků.
Umělá inteligence
Opět existuje celá řada knihoven, většinou jsou ale komerční XAITMENT, AI-Implant. Free knihovny jsou zaměřeny spíše na výuku: FEAR, Pogamut (aneb proč je tu tak populární UT :-)
29.10. - MMORPG, AI, Frameworky
MMORPG like networking
Open source hra PlaneShiftKnihovna OpenNeL
Nová iniciativa SUNu: Project DarkStar
Síťování
Na většinu základních otázek najdete odpověď v FAQ - Multiplayer and Network Programming na serveru GameDev.net.
Různé algoritmy optimalizující datový přenos se dají odkoukat od konkurence.
FPS:
Quake 3 a Unreal.
RTS:
Age of Empires
Frameworky
Microsoft XNA (XNA creators club)
Popcap framework a příklady her na Popcap portálu.