Ahoj vespolek, Vítá Vás opět Marky u obecně prospěšného
pořadu ( na vaší straně )
JAK OBLBNOUT UŽIVATELE
Já jsem vám sice všem slíbil, že dnes dodám algoritmy pro spisovný
anglický jazyk, ale časy se mění a my se měníme s nimi. Takže o čem
se dnes budeme bavit ? No o dungeonech přece.
PROGRAMOVÁNÍ GRAFIKY DO DUNGEONŮ
Víte ono je to všechno vlastně strašně jednoduché. Chcete udělat
klasický čverečkový dungeon? Potom se nesnažte vyrábět žádné obecné
vykreslování zdí. Vše lze udělat na tvrdo. Nemyslím tím však celá
GIGA dat rozšoupaná po CéDéčkách, ale jednoduchý algoritmus, který
rychle a qalitně spočte a vykreslí správnou pozici zdi na správné
místo.
Nejprve tedy kam co vykreslit. Jak si rozvrhnete jednotlivé kusy
dat po obrazovce rozmístit,je na každém z vás. Rozmístění jako např.
klasické dungeony typu Eye Of Beholder je dle mého názoru nejlepší.
Je možné obě datové složky prohodit a vše uspořádat jako nepříklad
Ishar, nebo použít jen stručnou informační linku jako u DOOMa, ale
to závisí pouze na fantas(magor)ii autora. Co je však důležité je
síť, do které se rozvrhnou textury. Síť zobrazená na obrázku je
optimální pro velikost výhledového okna 200*150 pixelů. Opět záleží
na autorovi, jak velké chce okno (tfuj, wokno, to je ale hnusný
slovo ) vlastně mít. Potom je nutné poměry stran náležitě upravit.
Ale hup a přesuneme se na to,jak vlastně tyto pole vyplnit samotnými
texturami. Není to vlastně nijak složité.
Začnu texturami "rovnoběžnými" s rovinou monitoru. Zde je vše tak
jednoduché jako facka sama. Každou textůrku ( co to plácám, textůry
do texťáku, v grafice se používaj grafůry) prostě zmenším, to značí,
že vynechám každý x-tý pixel.
Horší to už bude s natáčením textur na stěny jeskyní. Zde se
vy/zneužije nedokonalosti lidského oka. Stačí texturu vhodně zúžit
na jednom jejím konci a oko vesele vyšle informaci právě před námi
je krásná šikmá zeď. Každá zeď má tři základní parametry .
Těmito parametry jsou výška delší, kradší strany a šířka zobrazené
textury. Pro podlahy je vše naopak, tj. šířka užší a širšejší strany
a výška textury. Potom postupně programově projíždíme konstantní
hodnoty a testujeme kolik pixelů zobrazit a kam je vlastně šoupnout.
Všeobecně platí tento vztah:
For X := 1 To Delka_puvodni_textury Do
For Y := 1 To Vyska_puvodni_textury Do
Begin
If ( ( X Mod ( Delka_puvodni_textury Div
Delka_nove_textury ) ) = 0 ) And
( ( Y * ( Delsi_vyska_nove_textury -
Kratsi_vyska_nove_textury - 1 Div
( Vyska_puvodni_textury Div
Kratsi_vyska_nove_textury ) ) Mod
Vyska_puvodni_textury ) = 0 )
Then
PP ( XN , YN , Puvodni_textura[X,Y] ) ;
End ;
Promiňte, že jsem tak línej, ale XN a YN jsou stejná čísla jako ta
co jsou v podmínce a proto jsem je uvedl jen jednou. Jediný rozdíl
je, že jedničku ve výrazu .. - 1 DIv ( .. nahradíte čítačem Y.
Výsledkem takovéhoto snažení může být právě takovýto obrázek.
Toto je tedy stručně popsaný způsob vykreslování textur do dungeonů.
Posledním detailem je ztmavování a zesvětlování se textur do hloubky
bludiště. Zde však stačí mít koeficient světlosti, který nabývá
hodnot od 0 do 1 podle vzdálenosti od krajů ke středu tunelu. Pokud
jenotlivé složky palety každeho pixelu vynásobíte tímto koeficientem
dostaví se opět efekt zmatení lidského oka a člověk opět vnímá obraz
jako vzdalující se tunel.
Doufám, že jsem vám ve vašem programátorské pachtění alespoň málo
pomohl a všichni programujte dungeon ...........
............
..............
.............TEĎ
Ahoj příště
Marky
ReDox - Bacha ! To stínování, jak ho Marky popsal není zas tak
jednoduché. Víceméně je to blbost, protože máte pouze 256
barev a nemůžete si dovolit plejtvat na ňákejch stínovacích
blbostech. Většina známých dungeonů má jednotlivé části zdí
nakresleny natvrdo. Tzn., že malíř kreslí jak přímé, tak
šikmé zdi a případně i jejich vzdálenější verze. Vše vypadá
mnohem lépe, než kdyby se to všechno počítalo.
výheň