Hrátky se systémem LÖVE - částicové systémy

16. 6. 2009
Doba čtení: 17 minut

Sdílet

V patnácté části seriálu o programovacím jazyce Lua a systému LÖVE si řekneme, jakým způsobem je možné v aplikacích a hrách využívajících systém LÖVE použít částicové systémy (particle systems), například pro vytvoření animovaných efektů ohně, sněhu, mraků, tekoucí vody či různých výbuchů.

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.

lua1501

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).

lua1502

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).

lua1503

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­.newParticleSys­tem(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(particle­system, 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­.newParticleSys­tem(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(particle­System, x y) vykreslení částicového systému na zadané místo na obrazovce
lua1504

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­.newParticleSys­tem() 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(parti­cleSystemInstan­ce, parametr1, parametr2, …) použít „syntaktický cukr“ v podobě particleSyste­mInstance:meto­da(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().
lua1505

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: lua1506. 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:up­date(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.

lua1507

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
lua1508

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í.

lua1509lua1510

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
lua1511

Obrázek 11: Druhý demonstrační příklad – průběh simulace.

lua1512

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.

lua1513

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
lua1514

Obrázek 14: Třetí demonstrační příklad – průběh simulace.

lua1515

Obrázek 15: Třetí demonstrační příklad – konec simulace.

ict ve školství 24

8. Odkazy na Internetu

  1. Domovská stránka systému LÖVE
    http://love2d­.org/
  2. Tutoriály k systému LÖVE
    http://love2d­.org/?page=do­cumentation
  3. Screenshoty aplikací vytvořených v LÖVE
    http://love2d­.org/screenshots
  4. Domovská stránka programovacího jazyka Lua
    http://www.lu­a.org/ 
  5. Lua
    http://www.li­nuxexpres.cz/pra­xe/lua
  6. Lua
    http://cs.wiki­pedia.org/wiki/Lua
  7. Lua (programming language)
    http://en.wiki­pedia.org/wiki/Lu­a_(programmin­g_language)
  8. The Lua Programming Language
    http://www.ti­obe.com/index­.php/paperinfo/tpci/Lu­a.html
  9. Lua Programming Gems
    http://www.lu­a.org/gems/
  10. LuaForge
    http://luafor­ge.net/
  11. Forge project tree
    http://luafor­ge.net/softwa­remap/trove_lis­t.php
  12. gamedev.net: Lua
    http://www.ga­medev.net/refe­rence/program­ming/features/lu­a/
  13. Category:Lua-scripted games
    http://en.wiki­pedia.org/wiki/Ca­tegory:Lua-scripted_games
  14. Category:Lua-scriptable games
    http://en.wiki­pedia.org/wiki/Ca­tegory:Lua-scriptable_games
  15. Box2D Physics Engine
    http://www.box2d­.org/
lua1516

9. Literatura

  1. Arvo James (editor):
    Graphics Gems II,
    Academic Press, 1991, ISBN 0–120–54481–9
  2. Baraff David and Witkin Andrew:
    Physically Based Modeling,
    SIGGRAPH Course Notes, July 1998, pages B1–C12
  3. Beer and Johnson:
    Vector Mechanics for Engineers: Dynamics,
    Sixth Edition, WCB/McGraw-Hill, New York, 1997, ISBN 0–07121–828–9
  4. Beneš B., Felkel P., Sochor J. and Žára J.:
    Vizualizace
    Skripta ČVUT, Praha, 1997
  5. Benson Richard:
    Particle Systems,
    PowerPoint Presentation, 2002
  6. Blinn J. F.:
    Light Reflection Functions for Simulation of Clouds and Dusty surfaces,
    Computer Graphics 16(3), 1982, pages 21–29
  7. Blinn J. F.:
    Jim Blin's Corner: Dirty Pixels,
    Morgan Kaufmann, 1996, ISBN 1–558–60455–3
  8. 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
  9. Fuller J. et.al.:
    OpenGL Programming Guide,
    Silicon Graphics Inc., USA, 1997
  10. 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
  11. Glassner, Andrew S. (editor):
    Graphics Gems I,
    Academic Press, 1990, ISBN 0–122–86166–3
  12. Gross M.:
    Point Based Computer Graphics,
    In: Spring Conference on Computer Graphics Preceedings 2002, Budmerice, STUBA, ISBN 80–223–1730–6
  13. Hausen Ch.:
    Visualization of Vector Fields (2D and 3D),
    tutorial, National Laboratory, Los Alamos, 1993
  14. Heckbert Paul (editor):
    Graphics Gems IV,
    Academic Press, 1994, ISBN 0–123–36155–9
  15. Hill F. S. jr:
    Computer Graphics using OpenGL,
    Prentice Hall, 2001
  16. Hocknew R. W. and Eastwood J. W.:
    Computer Simulation using Particles,
    Adam Hilger, New York, 1988
  17. Intarrante V. and Grosch Ch.:
    Visualizing 3D Flow,
    IEEE Computer graphics and Applications, July 1998, pages 49–53
  18. Kirk David (editor):
    Graphics Gems III,
    Academic Press, 1992, ISBN 0–124–09673–5
  19. Landers, J.:
    The Ocean Spray in Your Face,
    Game Developer, Volume 5, Number 7, July 1998, pages 13–15.
  20. 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
  21. 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
  22. Magnetat-Thalmann B., Thalmann D. and Arnaldi B.:
    Computer Animation and Simulation 2000,
    Springer Verlag, Wien, ISBN 3–2118–3549–0
  23. Max N., Crawfis R. and Williams D.:
    Visualization for climate Modeling,
    IEEE Computer graphics and Applications, July 1993, pages 34–40
  24. Paeth Alan (editor):
    Graphics Gems V,
    Academic Press, 1995, ISBN: 0–125–43455–3
  25. 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
  26. 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
  27. Rhudy R.:
    Rendering Particle Systems Fast and Accurately,
    (listopad 2002)
  28. Rusinkiewicz Szymon, Levoy M.:
    QSplat: A Multiresolution Point Rendering System for Large Meshes,
    SIGGRAPH 2000, 2000
  29. Rusinkiewicz Szymon:
    Surface splatting,
    SIGGRAPH 2001, 2001
  30. Sims K.:
    Particle Animation and Rendering Using Data Parallel Computation,
    Computer Graphics (SIGGRAPH '90), Volume 24, Number 4, August 1990, pages 405–413
  31. Stalling D. et al.:
    Fast Display of Illuminated Field Lines,
    IEEE Transactions of Visualization and Computer Graphics, Volume 3, April 1997, pages 118–127
  32. 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
  33. 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,
  34. 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
  35. Tišnovský Pavel, Herout Adam, Zemčík Pavel:
    Particle Rendering Pipeline,
    Spring Conference on Computer Graphics 2003 Proceedings, 2003 ISBN 80–223–1837-X
  36. 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
  37. 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
  38. Tišnovský Pavel, Herout Adam, Zemčík Pavel:
    Cache–Based Parallel Particle Rendering Engine,
    In: ElectronicsLet­ters.com, ročník 2003, číslo 1, Brno, CZ, ISSN 1213–161X
  39. Tonnesen David Love:
    Dynamically Coupled Particle Systems for Geometric Modeling, Reconstruction, and Animation,
    Graduate Department of Computer Science, University of Toronto, 1998
  40. Watt A., Watt M.:
    Advanced Animation and Rendering Techniques, Theory and Practice,
    Addison-Wesley, New York, 1992
  41. Wijk van J.J:
    Flow Visualization with Surface Particles,
    IEEE Computer Graphics & Applications, July 1993, pages 19–24
  42. 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
  43. Witkin, J.:
    An Introduction to Physically Based Modeling: Particle System Dynamics,
    School of Computer Science, Robotics Institute, Carnegie Mellon University, 1997
  44. Witkin Andrew, Fleischer Kurt and Bass Alan:
    Energy constrains on parametrized models,
    Computer Graphics 21, 1987, pages 225–232
  45. Žára J., Beneš B., Felkel P.:
    Moderní počítačová grafika,
    Computer Press, Praha, 1998, ISBN 80–7226–049–9
  46. Žára J., Limpouch A., Beneš B., Werner T.:
    Počítačová grafika – principy a algoritmy,
    Grada, Praha, 1992, ISBN 80–85623–00–5
lua1517

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.