Általános áttekintés. A módszer lényege

Hasonló dokumentumok
GRAFIKA PROGRAMOZÁSA OPTIMALIZÁLT MEGJELENÍTÉS ALAPJAI GYAKORLATI 2D GRAFIKA II. RÉSZ. Dr. Mileff Péter

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Szoftvertechnológia alapjai Java előadások

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Java II. I A Java programozási nyelv alapelemei

Általános áttekintés. Általános áttekintés

117. AA Megoldó Alfréd AA 117.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Féléves feladat. Miről lesz szó? Bemutatkozás és követelmények

Készítette: Nagy Tibor István

Programozás II. 2. Dr. Iványi Péter

OOP I. Egyszerő algoritmusok és leírásuk. Készítette: Dr. Kotsis Domokos

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozás alapjai. 5. előadás

Smalltalk 2. Készítette: Szabó Éva

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

I. 288.: Utcai WiFi térkép

OOP: Java 8.Gy: Abstract osztályok, interfészek

Szálkezelés Rajzolás képernyőre Bevitel kezelése - Érintő képernyő - Billentyűzet

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Bevezetés a programozásba 2

Java Programozás 11. Ea: MVC modell

Programozási nyelvek Java

libgdx alapok, első alkalmazás

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Google Maps használata OSM, mint alternatív térkép

A C# PROGRAMOZÁSI NYELV

Collections. Összetett adatstruktúrák

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Mintavételes szabályozás mikrovezérlő segítségével

GráfRajz fejlesztői dokumentáció

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

Java II. I A Java programozási nyelv alapelemei

Szálkezelés Rajzolás képernyőre Bevitel kezelése - Érintő képernyő - Billentyűzet

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

GRAFIKA PROGRAMOZÁSA. Bemutatkozás és követelmények. Dr. Mileff Péter

Stack Vezérlés szerkezet Adat 2.

OOP #14 (referencia-elv)

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

3. Gyakorlat Ismerkedés a Java nyelvvel

Access adatbázis elérése OLE DB-n keresztül

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Java és web programozás

3. Osztályok II. Programozás II

7. fejezet: Mutatók és tömbök

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

GRAFIKA PROGRAMOZÁSA A MEGJELENÍTÉS ALAPJAI GYAKORLATI 2D GRAFIKA I. RÉSZ. Dr. Mileff Péter. Miskolci Egyetem Általános Informatikai Tanszék

Programozás II gyakorlat. 4. Öröklődés

A C# programozási nyelv alapjai

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

1. Egyszerű (primitív) típusok. 2. Referencia típusok

Objektumorientált programozás C# nyelven III.

Máté: Számítógépes grafika alapjai

Kalapácsvetés 2016 szöveges

Bevezetés a C++ programozási nyelvbe

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

1. Jelölje meg az összes igaz állítást a következők közül!

Android Pie újdonságai

Space Invaders Dokumenta cio

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Occam 1. Készítette: Szabó Éva

OOP: Java 4.Gy: Java osztályok

1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

BEÁGYAZOTT RENDSZEREK ALAPJAI. Grafikus benchmark alkalmazás

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Farkas Gyula Szakkollégium Bit- és számtologatók. DirectX9 felhasználása számítógépes grafikában (bevezető egy primitív keretrendszer)

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Operációs Rendszerek II. labor. 2. alkalom

Bevezetés, a C++ osztályok. Pere László

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Bevezetés a programozásba II 1. gyakorlat. A grafikus könyvtár használata, alakzatok rajzolása

Java és web programozás

Java és web programozás

JAVA SE/ME tanfolyam tematika

Programozási nyelvek JAVA EA+GY 1. gyakolat

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Programozási nyelvek II.: JAVA, 4. gyakorlat

Konkurens TCP Szerver

Programozás C nyelven (3. ELŐADÁS) Sapientia EMTE

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

C programozási nyelv Pointerek, tömbök, pointer aritmetika

bool _freehand = false; QPoint _lastpoint; // ebben a pontban volt az utolsó rajzolásnál az egérmutató

Java és web programozás

Átírás:

Dr. Mileff Péter 2 Általános áttekintés A módszer lényege A Tile-Map alapú megjelenítési technika: széles körben elterjedt a két dimenziós számítógépes játékok világában. Magyar elnevezése nincs, fordítása nem lenne túl sikeres. Az eljárás a korai számítógépes időkből származik: a gépek teljesítménye még alacsony volt, a bennük lévő memória mennyisége pedig kevés. A tile alapú megvalósítás ezekhez a lehetőségekhez alkalmazkodva fejlődött ki Ma a mobil platformok terjedésének köszönhetően ismét nagy népszerűségnek örvend. Szeretnénk egy olyan alkalmazást készíteni: amely megjelenítési területe nagyobb, mint egy képernyő mérete a képernyő görgethető valamilyen irányban. Probléma: A nagy területhez nagyobb memória szükséges A képernyők nem tárolhatók külön képként! Régen nem volt lehetséges, ma is gond Tipikusan ilyen kialakításúak a platformer és a felülnézeti játékok Ahol valamilyen területet lehet bejárni, sok az ismétlődő elem Több ezer ilyen játék készült és készül manapság is: Pl. Giana Sisters (C64), Super Mario (Nintendo), Sonic (SegaM), Prince of Persia, Droid Assault (PC), Gish (PC), stb 3 4 1

Példa Tile-Map alapú játékra (Frogatto - 2010) A módszer lényege A módosított vizualizáció: A bejárható területet és a képernyőt virtuálisan Tile-okra bontjuk fel pl. 128x128, 64x64, 32x32 pixel méretűre. A Tile-ok ismétlődnek a terület (háttér) elkészítésekor, Ezért elég őket egyszer betölteni, így csak egy Tile méretnyi területet foglalnak a memóriában. A térképhez egy leíró mátrix/adathalmaz készül. A korai játéknál jól megfigyelhető a kevés Tile-ból való építkezés. A mai programok azonban már sokkal részletesebb grafikai megvalósítással rendelkeznek. 5 6 A módszer lényege The Great Giana Sisters C64 - (1987) A bejárandó területet valamilyen szerkesztő szoftverrel hozzák létre legtöbbször belső fejlesztésű A tárolás megoldása: Egy terület leíró fájlt készítenek. a pálya Tile egységeit, azok indexeit egy N x M-es mátrixban tárolják el esetlegesen hozzájuk kapcsolódó egyéb információkkal Pl. átjárhatók-e vagy sem 7 8 2

Flashback - (1992) Mega Man X- (1993) 9 10 A módszer jellemzője Super Mario 3 TileSet Nehézség: jelentős plusz munkát kell befektetni a grafikus tervezői oldalról a világ szinte minden elemét Tile határra kell megrajzolni és azokat külön-külön kivágni. Vannak a világhálón elérhető segédprogramok: Segítenek a szerkesztésben. Pl. rácsháló képesek egy képet megadott méretű Tile-okra szétdarabolni. A megrajzolt és szétdarabolt Tile-ok halmaza a Tileset általában egy külön képben tárolják 11 12 3

Tile-Map megvalósítások jellemzői Legtöbbször rögzített, azonos méretű tile-ok Könnyű kezelhetőség Kissé rugalmatlan vizualizáció Minden azonos méretű, nehezebb rajzolás Változó méretű tile-ok Nehéz kezelhetőség Magasabb memória igény Rugalmas vizualizáció 13 14 Példa Tile-Map megvalósítás Egy kezdeti TileMap implementáció nem igényel bonyolult algoritmusokat. Szükség van egy CTile, és egy CTileMap osztályra. class CTile{ CTexture *m_ptiletexture; // Texture of the tile unsigned int m_uitextureindex; // Texture index from the tileset CVector2 m_pverts[4]; // Vertices CVector2 m_ptexcoords[4]; // Texture coordinates unsigned short index_i; // horizontal index in the MAP unsigned short index_j; // vertical index in the MAP bool m_bempty; // is Tile empty or not bool m_bcollide; // can player collide or not public:... ; Példa Tile-Map megvalósítás /// Tile Map base class class CTileMap{ CTile ***m_ptilemap; unsigned int m_uisizex; unsigned int m_uisizey; // TileMap // Map horizontal size // Map vertical size vector<ctexture*> m_vtiletextures; // TileSet textures unsigned int m_uitilesize; // size of the tiles float m_fscrollx; // vertical scroll float m_fscrolly; // horizontal scroll public:... ; 15 16 4

A módszer előnyei A megvalósítási forma számos előnnyel rendelkezik a memóriatakarékosság mellett. Egyik ilyen pozitívum az ütközésvizsgálatok viszonylag egyszerű megvalósítása. A Tile alapú megközelítés szintén a befoglaló dobozok technikáját használja az ütközések detektálására. Egy Tile pont egy box-nak felel meg egyszerűbb esetben. Box-box ütközés Bonyolultabb programoknál pixel szintű és egyéb megközelítés is szükséges lehet. 17 18 Tile-Map BB ütközésvizsgálat Tile-Map BB ütközésvizsgálat bool CheckTileBoundingBoxCollision(CBoundingBox2D *box){ for (int i = 0; i < m_uisizex; i++){ for (int j = 0; j < m_uisizey; j++){ if (m_ptilemap[i][j]->isempty() == false) { if (m_ptilemap[i][j]->iscollidable() == false){ continue; CVector2 *tilepos = m_ptilemap[i][j]->getposition(); if (box->maxpoint->x < tilepos->x box->minpoint->x > tilepos->x + m_uitilesize){ continue; if (box->maxpoint->y < tilepos->y box->minpoint-> y > tilepos->y + m_uitilesize){ continue; return true; // Hit!!! return false; 19 20 5

A módszer előnyei További előnye a gyors útkeresés algoritmikus megvalósítása. Oka: egy Tile nem egy pixelt jelent, hanem nagyobb egységet. Lehetőség van a Tile alapú útkeresésre valós időben Példa: Ez tette lehetővé a korai stratégiai játékok helyes működését nagy távolságokra a számítógép rögtön képes volt megtalálni a legrövidebb utat és elnavigálta az objektumot. pl. Warcraft 1 21 22 A szövegek kirajzolása a képernyőn alapvető követelmény. Nem grafikus alkalmazások esetében egyszerű: használhatjuk az operációs rendszer karakterkészletét és megjelenítő rutinjait Hardveresen gyorsított szoftverek esetében ez már nehezebb Mind az OpenGL mind a DirectX esetén megoldható true type betűkészlet is DirectX - D3DXFont beépített megoldás OpenGL nem egyszerű, nincs beépített rutin Az OS karakterkészlet használatának előnye: a karakterek típusa, a kiírt szöveg bármikor változtatható a szöveg kiírása viszonylag sok erőforrást vesz igénybe, csak olyan betűtípust használhatunk, amely az operációs rendszerben jelen van. A mai játékszoftverek számára ez nem kielégítő! Nem lehet tetszőleges formájú betűket kirajzolni legtöbb esetben az úgynevezett bitkép (bitmap fonts) alapú szövegkiíró megoldást választják. 23 24 6

Bitmap font: olyan textúra, amely tartalmazza a kiírandó betűk, illetve egyéb jelek képi megfelelőit. A grafikus készíti el Az elkészített képet fix méretű blokkokra bontja, minden blokk egy karakternek felel meg. A megoldással tetszőleges stílusú karakterek ábrázolhatók. Megszorítás: csakis olyan karaktereket tud értelmezni, amelyek szerepelnek a textúrában. Használata: a képet betöltéskor szét kell darabolni az egységes karakterméret alapján Szükséges egy összerendelés: melyik textúra valójában melyik betű megfelelője lesz. 25 26 Példa összerendelésre (Android) Példa összerendelésre (Android) // Map to associate a bitmap to each character private Map<Character, Bitmap> glyphs = new HashMap<Character, Bitmap>(62); private int width; // width in pixels of one character private int height; // height in pixels of one character // the characters in the English alphabet private char[] charactersl = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ; private char[] charactersu = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' ; public void drawstring(canvas canvas, String text, int x, int y) { for (int i = 0; i < text.length(); i++) { Character ch = text.charat(i); if (glyphs.get(ch)!= null) { canvas.drawbitmap(glyphs.get(ch), x + (i * width), y, null); private char[] numbers = new char[] { '1', '2', '3', '4', '5', '6', '7','8', '9', '0' ; 27 28 7

A karaktereket tartalmazó textúra létrehozása plusz munkát jelent a grafikus számára A világhálón elérhetők szoftverek, amelyek segítségével a fontkészlet generálható. Általában a karakter betöltő és kirajzoló rutin saját fejlesztés egy adott szoftver fejlesztői számára vannak lehetőségek, kész megoldások is. Pl. Freetype 2, a GLUT függvénykönyvtárak 29 30 8