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ň