Obsah
1. Hrátky se systémem LÖVE – částicové systémy
2. Vizuální podoba částic
3. Programové rozhraní systému LÖVE pro práci s částicovými systémy
4. Změna parametrů částicového systému
5. První demonstrační příklad – jednoduchý částicový systém
6. Druhý demonstrační příklad – omezení úhlu vyletujících částic
7. Třetí demonstrační příklad – částice vyletující ze zdroje pomalou rychlostí
8. Odkazy na Internetu
9. Literatura
1. Hrátky se systémem LÖVE – částicové systémy
Částicové systémy (také nazývané systémy částic, anglicky particle systems) představují velice silnou modelovací a animační techniku určenou pro vytváření takových objektů, které není možné jednoduše reprezentovat svým povrchem nebo objemem. Jedná se například o objekty představující přírodní fenomény jakými jsou sníh, déšť, oheň, mlha, dým nebo tekoucí voda. Velikou předností částicových systémů oproti hraniční či objemové reprezentaci je, podobně jako u fraktálních technik popsaných v samostatném seriálu, možnost poměrně jednoduše vytvářet animace. Při použití klasických modelovacích metod se při animování musí použít složitější techniky, například animační křivky, morfing, přímá kinematika nebo inverzní kinematika, což klade zvýšené požadavky jak na vlastní animační systém, tak na znalosti a schopnosti uživatele obsluhujícího tento systém. U částicových systémů se při animaci nemusí pracně zadávat jednotlivé polohy částic v čase, ale je možné jednoduše zadat počáteční polohu a rychlost částic a poté nechat proběhnout simulaci, ve které se automaticky, podle zadaných fyzikálních vlastností, vypočítají nové polohy částic. Právě z tohoto důvodu jsou částicové systémy oblíbené například mezi tvůrci her.
Obrázek 1: Výbuch vytvořený pomocí částicových systémů. Rendering byl proveden v programu POV-Ray.
Celý částicový systém je modelován jako soubor určitých základních prvků –částic (particle)– jejichž vlastnosti se průběžně mění v čase. Mezi základní vlastnosti částice patří zejména:
- poloha částice v rovině či prostoru
- vektor rychlosti částice
- zrychlení částice
- hmotnost částice
K těmto základním vlastnostem většinou přidáváme i vizuální vlastnosti, například:
- velikost částice
- tvar a způsob vykreslení částice
- barva částice
- obrázek představující částici
- průhlednost částice
Z důvodu vytváření a provádění animací se zavádí také vlastnost doba života částice. Při simulacích se po uplynutí doby života částice může částice zrušit nebo se na místě zániku částice mohou generovat další částice (rozpad částice). U složitějších částicových systémů lze reagovat i na vzájemné střety částic nebo interakci částic se svým okolím, tj. s tělesy, které se ve scéně nachází (tyto vlastnosti jsou v systému LÖVE podporovány jen v omezeném rozsahu).
Obrázek 2: Částicové systémy lze použít i při simulaci tekoucí vody. Rendering tohoto obrázku byl opět proveden v programu POV-Ray.
2. Vizuální podoba částic
Jednotlivé částice mohou být v nejjednodušším případě znázorněny jako pixely, je však možné je zobrazit i jako body o určité velikosti, kapky, kuličky, šipky nebo jiný geometrický útvar. V některých systémech je možné ke každé částici přiřadit lokální souřadný systém. Částice je potom orientována v prostoru (v původním významu byly částice v počítačové grafice chápány jako bezrozměrné body, které samozřejmě neměly nadefinovánu žádnou prostorovou orientaci). Této orientace můžeme využít při vykreslování, protože každé orientované částici můžeme přiřadit normálu, pomocí které lze spočítat lokální světelné podmínky v místě prostoru, kde se daná částice nachází. Při výpočtech světelných podmínek lze využít například Phongův osvětlovací model. V systému LÖVE je situace jednodušší, protože se nepracuje v prostoru, ale pouze rovině. Částice jsou z tohoto důvodu reprezentovány rastrovým obrázek, jehož jednotlivé pixely mohou mít přiřazenou průhlednost – z tohoto důvodu se velmi často pro uložení rastrového obrázku s částicí používá formát PNG (Portable Network Graphics).
Obrázek 3: Částicový systém vykreslený pomocí systému LÖVE. Vizuální podoba částic je uložena v rastrovém obrázku.
3. Programové rozhraní systému LÖVE pro práci s částicovými systémy
V systému LÖVE jsou částicové systémy představovány objektem nazvaným ParticleSystem. Částicový systém lze vytvořit pomocí funkce (konstruktoru) love.graphics.newParticleSystem(image, buffer), která má dva parametry – obrázek, pomocí něhož se vykreslují jednotlivé částice a numerickou hodnotu, kterou je možné omezit maximální celkový počet částic v částicovém systému (v závislosti na konfiguraci se totiž může počet částic v různých časových okamžicích lišit). Po vytvoření částicového systému a nastavení jeho parametrů (viz následující kapitola) lze částicový systém vykreslit do libovolného místa obrazovky (okna) pomocí přetížené funkce love.graphics.draw(particlesystem, x, y), které se předává jak objekt představující částicový systém, tak i souřadnice na obrazovce, ve kterých se má nacházet střed částicového systému. Systém LÖVE neobsahuje žádné další funkce, které by pracovaly s objektem částicového systému, veškeré nastavení jeho parametrů se provádí přímo voláním jeho metod, které jsou popsány v navazující kapitole.
Funkce | Význam |
---|---|
love.graphics.newParticleSystem(image, buffer) | vytvoření částicového systému, v předávaných parametrech je uložený obrázek použitý pro vykreslení částic, v parametru buffer je předán maximální povolený počet částic v systému |
love.graphics.draw(particleSystem, x y) | vykreslení částicového systému na zadané místo na obrazovce |
Obrázek 4: Částicový systém vykreslený pomocí systému LÖVE. Na částice sice nepůsobí gravitační síla, ale jejich radiální zrychlení je záporné, tj. částice jsou přitahovány zpět ke středu částicového systému.
4. Změna parametrů částicového systému
Po vytvoření částicového systému výše popsanou funkcí love.graphics.newParticleSystem() je možné parametry částicového systému takřka libovolně měnit, spouštět či naopak zastavovat simulaci pohybu částic atd. Veškerá práce s částicovým systémem je prováděna pomocí metod, tj. v žargonu programátorů v jazyku Lua se jedná o funkce, jejichž prvním parametrem je instance částicového systému. Z tohoto důvodu je možné namísto volání particleSystem.metoda(particleSystemInstance, parametr1, parametr2, …) použít „syntaktický cukr“ v podobě particleSystemInstance:metoda(parametr1, parametr2, …) – povšimněte si použití dvojtečky oddělující jméno instance částicového systému od názvu volané metody. V následující tabulce jsou vypsány některé vybrané metody ovlivňující parametry částicového systému – jedná se o metody použité v demonstračních příkladech. Další metody (a samozřejmě i parametry, které jsou těmito metodami ovlivněny) budou popsány v navazující části tohoto seriálu:
Metoda | Význam |
---|---|
setBuffer() | Nastavení maximálního počtu částic v systému. Příliš velký počet částic (řádově desítky až stovky tisíc) již může znamenat citelné zatížení počítače. |
setSprite() | Nastavení obrázku, který představuje částice. |
setEmmisionRate() | Počet částic, které mají být vytvořeny (emitovány) za jednu sekundu. Skutečný počet emitovaných částic však může být nižší, v závislosti na jejich životnosti a maximálním povoleném počtu částic v systému. |
setLifetime() | Životnost celého systému částic. Pokud je překročena doba života částicového systému, přestane emitor vytvářet další částice. Lze nastavit i hodnotu –1, která znamená neomezenou dobu života částicového systému. |
setDirection() | Nastavení průměrné hodnoty úhlu, pod kterým částice vyletují ze svého zdroje (emitoru). Tento parametr má smysl nastavovat pouze v případě, že je rozptyl menší než 360°. |
setSpread() | Nastavení rozptylu vyletujících částic. Standardně je nastaven rozptyl 360°, tj. částice jsou emitovány do všech směrů. |
setParticleLife() | Nastavení průměrné či minimální a maximální doby života částic. Buď je zadán pouze jeden údaj, který je chápán jako průměrná doba života částice v sekundách, nebo údaje dva – minimální a maximální doba, opět specifikovaná v sekundách. |
setPosition() | Specifikace souřadnic emitoru částic v rovině. |
setSpeed() | Zadání průměrné, popř. minimální a maximální počáteční rychlosti částic. |
setGravity() | Specifikace velikosti gravitace, tj. míry tíhového zrychlení působícího ve směru y-ové osy. Buď je zadána jedna hodnota představující konstantní míru gravitace nebo dvě hodnoty – minimální a maximální hodnotu, která se náhodně v průběhu doby života částicového systému mění. |
setSize() | Nastavení relativní velikosti částice popř. její počáteční a koncové velikosti. Částice může v průběhu svého života měnit velikost – růst či se naopak zmenšovat. Hodnota 1 značí původní velikost rastrového obrázku s předlohou částice, 2 dvojnásobnou velikost atd. |
setColor() | Nastavení barvy částice. Tato funkce pracuje korektně pouze v případě, že je povolena modulace barev, viz programový kód callback funkce draw() v demonstračních příkladech. Tuto metodu je možné volat buď s jednou barvou (což znamená, že barva částice je po dobu jejího života konstantní), nebo s dvojicí barev – potom se barva částice průběžně mění z první barvy na barvu druhou. |
start() | Zapnutí emitoru částic. Po zavolání této metody vytváří emitor nové částice až do chvíle, než je zavolána metoda stop(), pause() či až do konce života částicového systému nastaveného metodou setLifetime(). |
stop() | Vypnutí emitoru částic a vymazání interního časovače, pomocí kterého se testuje, zda již není překročena doba života částicového systému. |
pause() | Pozastavení emitoru částic. |
reset() | Zastavení emitoru částic, vymazání interního časovače a odstranění všech částic ze systému. |
update() | Po zavolání této metody se provede změna stavu částicového systému na základě jeho parametrů, tj. dojde k vytvoření (emitaci) nových částic, ke zrušení částic, které překročily dobu svého života i ke změně dalších parametrů částic (polohy, rychlosti, barvy, tvaru, natočení atd.). Tuto metodu je zapotřebí volat průběžně, ideálně z callback funkce draw() či update(). |
Obrázek 5: Částicový systém vytvořený pomocí druhého demonstračního příkladu. Vektor počáteční rychlosti částic v tomto případě leží mezi 0° a 90° se střední hodnotou 45°.
5. První demonstrační příklad – jednoduchý částicový systém
V dnešním prvním demonstračním příkladu je ukázán způsob vytvoření velmi jednoduchého částicového systému, v němž částice vznikají v jednom bodě, ze kterého se rozletují libovolným směrem (úhel vyletování částic není omezený, obsahuje celý kruh o 360°). Na částice působí gravitační síla, jejíž vektor je orientován kolmo dolů, ovšem průměrná počáteční rychlost částic je poměrně velká, takže vliv gravitační síly na trajektorii části je nepatrný (na rozdíl od příkladu třetího). Vizuální podoba částice je uložena v následujícím obrázku: . Tento obrázek o rozměrech 32×32 pixelů je sice zdánlivě celý bílý, ovšem mění se průhlednost jednotlivých pixelů – barva každého pixelu je uložena na 32 bitech, přičemž kromě tří barvových složek R (red), G (green), B (blue) je čtvrtý bajt rezervován právě pro uložení průhlednosti, tj. hodnoty α. Průhlednost pixelů lze zobrazit velmi snadno například v grafickém editoru GIMP – postačuje vypnutí barvových kanálů R, G, B a ponechání pouze α–kanálu. Povšimněte si, že metoda particleSystem:update(dt) je volána v callback funkci update(), která je volána v relativně pravidelných intervalech. Simulace se spustí klávesou S, kdykoli v průběhu simulace je možné provést restart klávesou R popř. program ukončit pomocí klávesy Esc.
Obrázek 7: První demonstrační příklad
------------------------------------------------- -- Seriál "Programovací jazyk Lua" -- -- První demonstrační příklad: -- Jednoduchý částicový systém ------------------------------------------------- -- rozměry okna window = { width = 800, height = 600 } -- asociativní pole představující objekt částicového systému particleSystem = nil -- maximální počet částic particleCount = 1000 -- callback funkce zavolaná při inicializaci aplikace function load() -- inicializace grafického režimu love.graphics.setMode(window.width, window.height, false, false, 0) -- načtení obrázku představujícího jednu částici local particleImage = love.graphics.newImage("part1.png") -- vytvoření částicového systému s jeho inicializací particleSystem = love.graphics.newParticleSystem(particleImage, particleCount) particleSystem:setEmissionRate(100) particleSystem:setSpeed(100, 400) particleSystem:setGravity(200,500) particleSystem:setSize(2, 1) particleSystem:setColor(love.graphics.newColor(255, 100, 255, 255), love.graphics.newColor(0, 0, 255, 0)) particleSystem:setPosition(window.width/2, window.height/2) particleSystem:setLifetime(1) particleSystem:setParticleLife(3) particleSystem:setDirection(0) particleSystem:setSpread(360) particleSystem:stop() end -- pravidelně volaná callback funkce function update(dt) if love.keyboard.isDown(love.key_r) then love.system.restart() end -- přepočítat parametry částicového systému particleSystem:update(dt) end -- callback funkce volaná průběžně ve chvíli, kdy je zapotřebí -- překreslit obsah okna function draw() love.graphics.setColorMode(love.color_modulate) love.graphics.setBlendMode(love.blend_additive) love.graphics.draw(particleSystem, 0, 0) end -- callback funkce volaná ve chvíli, kdy uživatel stlačí nějakou klávesu function keypressed(key) if key == love.key_s then particleSystem:start() end if key == love.key_escape then love.system.exit() end end -- finito
Obrázek 8: První demonstrační příklad – začátek simulace.
6. Druhý demonstrační příklad – omezení úhlu vyletujících částic
Ve druhém demonstračním příkladu je ukázáno, jakým způsobem je možné omezit úhel (tj. směr vektoru rychlosti) částic vyletujících ze zdroje částic (emitoru). Při standardním nastavení vylétávají částice ze zdroje libovolným směrem, přičemž žádný směr není preferován. Pomocí metod particleSystem.setDirection() a particleSystem.setSpread() je možné změnit jak průměrnou hodnotu tohoto úhlu, tak i povolenou odchylku od této hodnoty, tj. úhel „vějíře“, ze kterého částice ze svého zdroje vyletují.
Obrázek 9 a 10: Druhý demonstrační příklad – začátek simulace.
------------------------------------------------- -- Seriál "Programovací jazyk Lua" -- -- Druhý demonstrační příklad: -- Částice vyletující pouze pod omezeným úhlem ------------------------------------------------- -- rozměry okna window = { width = 800, height = 600 } -- asociativní pole představující objekt částicového systému particleSystem = nil -- maximální počet částic particleCount = 4000 -- callback funkce zavolaná při inicializaci aplikace function load() -- inicializace grafického režimu love.graphics.setMode(window.width, window.height, false, false, 0) -- načtení obrázku představujícího jednu částici local particleImage = love.graphics.newImage("part1.png") -- vytvoření částicového systému s jeho inicializací particleSystem = love.graphics.newParticleSystem(particleImage, particleCount) particleSystem:setEmissionRate(1000) particleSystem:setSpeed(300, 400) particleSystem:setGravity(200, 500) particleSystem:setSize(1, 1) particleSystem:setColor(love.graphics.newColor(50, 50, 255, 255), love.graphics.newColor(0, 255, 255, 0)) particleSystem:setPosition(100, window.height/2) particleSystem:setLifetime(20) particleSystem:setParticleLife(7) particleSystem:setDirection(270+45) particleSystem:setSpread(30) particleSystem:stop() end -- pravidelně volaná callback funkce function update(dt) if love.keyboard.isDown(love.key_r) then love.system.restart() end -- přepočítat parametry částicového systému particleSystem:update(dt) end -- callback funkce volaná průběžně ve chvíli, kdy je zapotřebí -- překreslit obsah okna function draw() love.graphics.setColorMode(love.color_modulate) love.graphics.setBlendMode(love.blend_additive) love.graphics.draw(particleSystem, 0, 0) end -- callback funkce volaná ve chvíli, kdy uživatel stlačí nějakou klávesu function keypressed(key) if key == love.key_s then particleSystem:start() end if key == love.key_escape then love.system.exit() end end -- finito
Obrázek 11: Druhý demonstrační příklad – průběh simulace.
Obrázek 12: Druhý demonstrační příklad – konec simulace.
7. Třetí demonstrační příklad – částice vyletující ze zdroje pomalou rychlostí
Ve třetím demonstračním příkladu je použit částicový systém, jehož částice mají velmi malou počáteční rychlost. V tomto případě je hlavní silou, která určuje trajektorii částic, gravitace. Výsledkem je zajímavý efekt „kapající“ ohnivé koule.
Obrázek 13: Třetí demonstrační příklad – začátek simulace.
------------------------------------------------- -- Seriál "Programovací jazyk Lua" -- -- Třetí demonstrační příklad: -- Částice s nízkou počáteční rychlostí ------------------------------------------------- -- rozměry okna window = { width = 800, height = 600 } -- asociativní pole představující objekt částicového systému particleSystem = nil -- maximální počet částic particleCount = 1000 -- callback funkce zavolaná při inicializaci aplikace function load() -- inicializace grafického režimu love.graphics.setMode(window.width, window.height, false, false, 0) -- načtení obrázku představujícího jednu částici local particleImage = love.graphics.newImage("part1.png") -- vytvoření částicového systému s jeho inicializací particleSystem = love.graphics.newParticleSystem(particleImage, particleCount) particleSystem:setEmissionRate(100) particleSystem:setSpeed(30, 60) particleSystem:setGravity(200, 500) particleSystem:setSize(2, 1) particleSystem:setColor(love.graphics.newColor(255, 255, 10, 255), love.graphics.newColor(255, 10, 10, 0)) particleSystem:setPosition(window.width/2, 50) particleSystem:setLifetime(20) particleSystem:setParticleLife(5) particleSystem:setDirection(0) particleSystem:setSpread(360) particleSystem:stop() end -- pravidelně volaná callback funkce function update(dt) if love.keyboard.isDown(love.key_r) then love.system.restart() end -- přepočítat parametry částicového systému particleSystem:update(dt) end -- callback funkce volaná průběžně ve chvíli, kdy je zapotřebí -- překreslit obsah okna function draw() love.graphics.setColorMode(love.color_modulate) love.graphics.setBlendMode(love.blend_additive) love.graphics.draw(particleSystem, 0, 0) end -- callback funkce volaná ve chvíli, kdy uživatel stlačí nějakou klávesu function keypressed(key) if key == love.key_s then particleSystem:start() end if key == love.key_escape then love.system.exit() end end -- finito
Obrázek 14: Třetí demonstrační příklad – průběh simulace.
Obrázek 15: Třetí demonstrační příklad – konec simulace.
8. Odkazy na Internetu
- Domovská stránka systému LÖVE
http://love2d.org/ - Tutoriály k systému LÖVE
http://love2d.org/?page=documentation - Screenshoty aplikací vytvořených v LÖVE
http://love2d.org/screenshots - Domovská stránka programovacího jazyka Lua
http://www.lua.org/ - Lua
http://www.linuxexpres.cz/praxe/lua - Lua
http://cs.wikipedia.org/wiki/Lua - Lua (programming language)
http://en.wikipedia.org/wiki/Lua_(programming_language) - The Lua Programming Language
http://www.tiobe.com/index.php/paperinfo/tpci/Lua.html - Lua Programming Gems
http://www.lua.org/gems/ - LuaForge
http://luaforge.net/ - Forge project tree
http://luaforge.net/softwaremap/trove_list.php - gamedev.net: Lua
http://www.gamedev.net/reference/programming/features/lua/ - Category:Lua-scripted games
http://en.wikipedia.org/wiki/Category:Lua-scripted_games - Category:Lua-scriptable games
http://en.wikipedia.org/wiki/Category:Lua-scriptable_games - Box2D Physics Engine
http://www.box2d.org/
9. Literatura
- Arvo James (editor):
Graphics Gems II,
Academic Press, 1991, ISBN 0–120–54481–9 - Baraff David and Witkin Andrew:
Physically Based Modeling,
SIGGRAPH Course Notes, July 1998, pages B1–C12 - Beer and Johnson:
Vector Mechanics for Engineers: Dynamics,
Sixth Edition, WCB/McGraw-Hill, New York, 1997, ISBN 0–07121–828–9 - Beneš B., Felkel P., Sochor J. and Žára J.:
Vizualizace
Skripta ČVUT, Praha, 1997 - Benson Richard:
Particle Systems,
PowerPoint Presentation, 2002 - Blinn J. F.:
Light Reflection Functions for Simulation of Clouds and Dusty surfaces,
Computer Graphics 16(3), 1982, pages 21–29 - Blinn J. F.:
Jim Blin's Corner: Dirty Pixels,
Morgan Kaufmann, 1996, ISBN 1–558–60455–3 - Foley J., Dam van A., Feiner S., Hughes J.:
Computer Graphics – Principles and Practice (Second Edition),
Addison-Wesley, Reading, Massachusetts, 1990, ISBN 0–201–12110–7 - Fuller J. et.al.:
OpenGL Programming Guide,
Silicon Graphics Inc., USA, 1997 - Galagher R. S. (editor):
Computer Visualization (Graphics Techniques for Scientific and Engineering Analysis),
A Solomon Press Book, CRC Press, 1995, ISBN 0–8493–9050–8 - Glassner, Andrew S. (editor):
Graphics Gems I,
Academic Press, 1990, ISBN 0–122–86166–3 - Gross M.:
Point Based Computer Graphics,
In: Spring Conference on Computer Graphics Preceedings 2002, Budmerice, STUBA, ISBN 80–223–1730–6 - Hausen Ch.:
Visualization of Vector Fields (2D and 3D),
tutorial, National Laboratory, Los Alamos, 1993 - Heckbert Paul (editor):
Graphics Gems IV,
Academic Press, 1994, ISBN 0–123–36155–9 - Hill F. S. jr:
Computer Graphics using OpenGL,
Prentice Hall, 2001 - Hocknew R. W. and Eastwood J. W.:
Computer Simulation using Particles,
Adam Hilger, New York, 1988 - Intarrante V. and Grosch Ch.:
Visualizing 3D Flow,
IEEE Computer graphics and Applications, July 1998, pages 49–53 - Kirk David (editor):
Graphics Gems III,
Academic Press, 1992, ISBN 0–124–09673–5 - Landers, J.:
The Ocean Spray in Your Face,
Game Developer, Volume 5, Number 7, July 1998, pages 13–15. - Levoy, M. and Whitted, T:
The Use of Points as a Display Primitive,
Technical Report TR 85–022, University of North Carolina at Chapel Hill, 1985 - Loke T., Tan D., Seah H. and Er M.:
Rendering Fireworks Displays,
IEEE Computer Graphics & Applications, May 1992, Volume 12, Number 3, pages 33–43 - Magnetat-Thalmann B., Thalmann D. and Arnaldi B.:
Computer Animation and Simulation 2000,
Springer Verlag, Wien, ISBN 3–2118–3549–0 - Max N., Crawfis R. and Williams D.:
Visualization for climate Modeling,
IEEE Computer graphics and Applications, July 1993, pages 34–40 - Paeth Alan (editor):
Graphics Gems V,
Academic Press, 1995, ISBN: 0–125–43455–3 - Reeves William T.:
Particle Systems – A Technique for Modeling a Class of Fuzzy objects,
Computer Graphics vol.17, Number 3, July 1983, pages 359–376 - Reeves William T. and Blau R.:
Approximate and Probabilistic Algorithms for Shading and Rendering Structured Particle System,
Proceedings of SIGGRAPH 1985, Volume 19(3), 1985, pages 313–322 - Rhudy R.:
Rendering Particle Systems Fast and Accurately,
(listopad 2002) - Rusinkiewicz Szymon, Levoy M.:
QSplat: A Multiresolution Point Rendering System for Large Meshes,
SIGGRAPH 2000, 2000 - Rusinkiewicz Szymon:
Surface splatting,
SIGGRAPH 2001, 2001 - Sims K.:
Particle Animation and Rendering Using Data Parallel Computation,
Computer Graphics (SIGGRAPH '90), Volume 24, Number 4, August 1990, pages 405–413 - Stalling D. et al.:
Fast Display of Illuminated Field Lines,
IEEE Transactions of Visualization and Computer Graphics, Volume 3, April 1997, pages 118–127 - Tišnovský Pavel, Herout Adam:
Adaptive Algorithm for Vector Field Interpolation Based on Octree Structure,
In: Spring Conference on Computer Graphics Preceedings 2002, Budmerice, STUBA, ISBN 80–223–1730–6, pages 145–150 - Tišnovský Pavel, Herout Adam:
Vizualizace vektorových polí s využitím metody sledování částic,
In: Elektrorevue, číslo 20, ročník 2002, Brno, CZ, ISSN 1213–1539, - Tišnovský Pavel, Herout Adam:
Vector Field Calculations on a Special Hardware Architecture,
In: East-West-Vision 2002 (EWV'02) International Workshop on Computer Vision, Computer Graphics, New Media, 2002, ISBN 3–85403–163 - Tišnovský Pavel, Herout Adam, Zemčík Pavel:
Particle Rendering Pipeline,
Spring Conference on Computer Graphics 2003 Proceedings, 2003 ISBN 80–223–1837-X - Tišnovský Pavel, Herout Adam, Řezáč David:
Vizualizace prostorových potenciálních polí vypočítaných metodou TKSL/C,
In: Proceedings of the International Conference and Competition STUDENT EEICT 2003, Brno, CZ, 2003, pages 310–314 - Tišnovský Pavel, Herout Adam, Řezáč David:
Visualization of 3D Potential Fields Computed Using TKSL/C,
In: Proceedings of the 9th Conference and Competition STUDENT EEICT 2003, Brno, CZ, 2003, ISBN 80–214–2379-X, pages 583–587 - Tišnovský Pavel, Herout Adam, Zemčík Pavel:
Cache–Based Parallel Particle Rendering Engine,
In: ElectronicsLetters.com, ročník 2003, číslo 1, Brno, CZ, ISSN 1213–161X - Tonnesen David Love:
Dynamically Coupled Particle Systems for Geometric Modeling, Reconstruction, and Animation,
Graduate Department of Computer Science, University of Toronto, 1998 - Watt A., Watt M.:
Advanced Animation and Rendering Techniques, Theory and Practice,
Addison-Wesley, New York, 1992 - Wijk van J.J:
Flow Visualization with Surface Particles,
IEEE Computer Graphics & Applications, July 1993, pages 19–24 - Wijk van J.J, Hin A. J. S., de Leeuw W. C., Post F. H.:
Three Ways to Show 3D Fluid Flow,
IEEE Computer Graphics \& Applications, September 1994, pages 33–39 - Witkin, J.:
An Introduction to Physically Based Modeling: Particle System Dynamics,
School of Computer Science, Robotics Institute, Carnegie Mellon University, 1997 - Witkin Andrew, Fleischer Kurt and Bass Alan:
Energy constrains on parametrized models,
Computer Graphics 21, 1987, pages 225–232 - Žára J., Beneš B., Felkel P.:
Moderní počítačová grafika,
Computer Press, Praha, 1998, ISBN 80–7226–049–9 - Žára J., Limpouch A., Beneš B., Werner T.:
Počítačová grafika – principy a algoritmy,
Grada, Praha, 1992, ISBN 80–85623–00–5