Nedávno som v diskusii o prehrávaní videa v GameBlenderi spomínal, že rozmýšľam nad vytvorením systému pluginov pre GameBlender. Po dlhšom aktívnom štúdiu zdrojových súborov aktuálnej verzie 2.41 som dal dokopy koncept, ako by to mohlo fungovať. Prvým výstupom bude plugin pre prehrávanie videa v textúre v GameBlenderi, ale možnosti sú podľa mňa obrovské - v podstate hocičo, čo v súčasnosti GameBlenderu chýba, by sa dalo takto dorobiť (softbodies, časticové systémy, animácia kvapalín, realtime tiene...). Chcel by som vedieť vaše názory na tento návrh.
Princípy systému pluginov:
1. Pluginy sú implementované v C/C++ a prezentované vo forme dynamickej knižnice (dll) - momentálne vyvíjam pod Windows, pre linuxy privítam pomoc.
2. Pluginy pristupujú do vnútorných objektov GameBlenderu cez zvolený vstupný bod rozhrania Pythonu - uprednostňujem prístup cez KX_GameObject (štandardný herný objekt), ktorý pomocou pythonovského skriptu odošleme do pluginu.
3. Pre narábanie z vnútornými objektmi GameBlenderu budú v plugine použité vybrané funkcie zo zdrojového kódu Blenderu - dôsledkom je, že plugin bude publikovaný pod GPL (používa kód licencovaný pod GPL).
4. Plugin bude poskytovať rozhranie v Pythone pre narábanie s objektmi pluginu.
5. Dôsledkom bude jednoduchá práca s pluginom, výrazne sa zlepší kompatibilita s novými verziami Blenderu (ak sa nezmení dotknutá časť kódu Blenderu, plugin bude fungovať aj v novej verzii, ak áno, tak sa len do pluginu doplnia zmeny a skompiluje sa nová verzia pluginu - odpadá integrovanie zmien do kódu Blenderu a jeho následná rekompilácia).
6. Z pluginu bude dostupná väčšina vnútorných objektov GameBlenderu - v podstate je to takmer zhodné s tým, ako keby boli robené zmeny priamo v zdrojových kódoch Blenderu.
Príklad použitia plánovaného pluginu pre prehrávanie videa v textúre (skript v Pythone v GameBlenderi):
Kód:
# plugin pre prehravanie videa v texture
import texPlayer
# ziskanie objektu, na ktorom bude video prehravane
obj = GameLogic.getCurrentController().getOwner()
# nacitanie avi suboru do prehravaca
if hasattr(GameLogic, 'player') == 0:
GameLogic.player = texPlayer.Player('c:/myVideo.avi')
# prehravaj video v texture objektu
GameLogic.player.play(obj)
Aktuálny stav: mám funkčný pokusný plugin, ktorý dokáže zapisovať do textúry objektu testovacie dáta (urobí v textúre biely pásik). Zostáva dorobiť kopírovanie obrázkov z prehrávaného videa do textúry - ak bude čas cez Veľkú Noc, tak to bude hotové budúci týždeň.