Játékfejlesztés. Szirmay-Kalos László

Hasonló dokumentumok
sgame/spaceshootgame képszintézis interakció vezérlés avatar Virtuális világ Windows + GLUT szimuláció input Virtuális világmodell

Plakátok, részecskerendszerek. Szécsi László

Tervminták a valósidejű gyakorlatban

2D képszintézis. Szirmay-Kalos László

Geometriai modellezés. Szécsi László

Merev testek mechanikája. Szécsi László

Mesh from file, OrthoCamera, PerspectiveCamera. Szécsi László 3D Grafikus Rendszerek 3. labor

Transzformációk. Grafikus játékok fejlesztése Szécsi László t05-transform

Árnyalás, env mapping. Szécsi László 3D Grafikus Rendszerek 3. labor

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Transzformációk. Szécsi László

A játékfejlesztés több területből áll. A kódolás csupán egy része a munkáknak.

Számítógépes grafika

Termék modell. Definíció:

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

3D számítógépes geometria és alakzatrekonstrukció

2014/2015. tavaszi félév

8. előadás. Kúpszeletek

KOORDINÁTA-GEOMETRIA

Ütközések. Szécsi László

Koordináta-geometria feladatok (emelt szint)

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

Láthatósági kérdések

VIK A2 Matematika - BOSCH, Hatvan, 3. Gyakorlati anyag. Mátrix rangja

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

Szirmay-Kalos László. L(x, ω)=l e (x,ω)+ L(h(x,-ω),ω) f r (ω,x, ω) cos θ dω A jobb oldali radiancia:

LINEÁRIS ALGEBRA. matematika alapszak. Euklideszi terek. SZTE Bolyai Intézet, őszi félév. Euklideszi terek LINEÁRIS ALGEBRA 1 / 40

Textúrák. Szécsi László

1. Bevezetés 1. Köszönetnyilvánítás A számítógépes játékfejlesztésről 3

Farkas Gyula Szakkollégium Bit- és számtologatók. Parametrikus görbék és felületek ábrázolása március 8., 22. Róth Ágoston

Koordinátarendszerek

A Hamilton-Jacobi-egyenlet

2048 3D. Csapatnév: kurkomisi. Név: Kurkó Mihály-Zsolt. Elérhetőség: telefon: Iskola: Márton Áron Gimnázium

SZERKEZETFÖLDTANI OKTATÓPROGRAM, VETŐMENTI ELMOZDULÁSOK MODELLEZÉSÉRE. Kaczur Sándor Fintor Krisztián

Hajder Levente 2017/2018. II. félév

Számítógépes grafika

BME MOGI Gépészeti informatika 15.

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

3D-s számítógépes geometria és alakzatrekonstrukció

Tartalom. Tartalom. Hajder Levente Szakasz raszterizálása. 2017/2018. II. félév. Poligon raszterizáció.

Egyenes mert nincs se kezdő se végpontja

Egybevágósági transzformációk. A geometriai transzformációk olyan függvények, amelyek ponthoz pontot rendelnek hozzá.

5. házi feladat. AB, CD kitér élpárra történ tükrözések: Az ered transzformáció: mivel az origó xpont, így nincs szükség homogénkoordinátás

Számítógépes Graka - 4. Gyak

3D - geometriai modellezés, alakzatrekonstrukció, nyomtatás

A számítógépes grafika alapjai kurzus, vizsgatételek és tankönyvi referenciák 2014

HLSL programozás. Szécsi László

117. AA Megoldó Alfréd AA 117.

HLSL programozás. Grafikus játékok fejlesztése Szécsi László t06-hlsl

Medical Imaging Regisztrációs probléma. Regisztrációs feladatok osztályozása

Számítógépes geometria

Az elméleti mechanika alapjai

Denavit-Hartenberg konvenció alkalmazása térbeli 3DoF nyílt kinematikai láncú hengerkoordinátás és gömbi koordinátás robotra

Számítógépes geometria (mester kurzus) III

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Periódikus mozgás, körmozgás, bolygók mozgása, Newton törvények

Minimum követelmények matematika tantárgyból 11. évfolyamon

CodeCamp Döntő feladat

Végeselem analízis 3. gyakorlat (kidolgozta: Aczél Ákos egyetemi tanársegéd, Bojtár Gergely egyetemi tanársegéd)

Párhuzamos programozási feladatok

Térbeli transzformációk, a tér leképezése síkra

Számítási feladatok a Számítógépi geometria órához

FIZIKA II. Dr. Rácz Ervin. egyetemi docens

Mesh generálás. IványiPéter

Lineáris algebra zárthelyi dolgozat javítókulcs, Informatika I márc.11. A csoport

Klár Gergely 2010/2011. tavaszi félév

Számítógépes Grafika mintafeladatok

Feladatok. Tervek alapján látvány terv készítése. Irodai munka Test modellezés. Létező objektum számítógépes modelljének elkészítése

Serret-Frenet képletek

Az egyenes egyenlete: 2 pont. Az összevont alak: 1 pont. Melyik ábrán látható e függvény grafikonjának egy részlete?

Geometria II gyakorlatok

x = 1 = ı (imaginárius egység), illetve x 12 = 1 ± 1 4 2

t, u v. u v t A kúpra írt csavarvonalról I. rész

5. előadás. Skaláris szorzás

2. ELŐADÁS. Transzformációk Egyszerű alakzatok

FIZIKA II. Az áram és a mágneses tér kapcsolata

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Geometria III.

1. Komplex számok. x 2 = 1 és x 2 + x + 1 = 0. egyenletek megoldását számnak tekinthessük:

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Robotika. Kinematika. Magyar Attila

9. Írjuk fel annak a síknak az egyenletét, amely átmegy az M 0(1, 2, 3) ponton és. egyenessel;

1. A Hilbert féle axiómarendszer

Farkas Gyula Szakkollégium Bit- és számtologatók. DirectX9 1. Szín, fény, textúra 2. Stencil buffer használata (tükörkép, hamis árnyék)

Bevezetés a CGI-be. 1. Történelem

Raszter georeferálás QGIS-ben Összeállította: dr. Siki Zoltán verzióra aktualizálta: Jáky András

1. feladatsor Komplex számok

Az objektum leírására szolgálnak. Mire jók? Sokszor maga a jellemző az érdekes: Tömörítés. Objektumok csoportosítására

MATEMATIKA HETI 5 ÓRA

Conway életjátéka (Conway' s Game of Life)

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

3D Számítógépes Geometria II.

Geometria II gyakorlatok

Nagy András. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 2010.

Lagrange és Hamilton mechanika

3D koordináta-rendszerek

Kinematika szeptember Vonatkoztatási rendszerek, koordinátarendszerek

ZH mintapélda. Feladat. Felület

Lássuk be, hogy nem lehet a három pontot úgy elhelyezni, hogy egy inerciarendszerben

Minták automatikus osztályba sorolása a mintát leíró jellemzők alapján. Típusok: felügyelt és felügyelet nélküli tanuló eljárások

Klár Gergely

Átírás:

Játékfejlesztés Szirmay-Kalos László

Virtuális valóság képszintézis interakció vezérlés avatár Virtuális világ = objektumok + törvények

Animate( ), Draw( ) Control( ) Játék OO képszintézis Interact( ) vezérlés ProcessInput( ) SetCameraTransform( ) avatár Világ koordináta rendszer Scene: vector<gameobject *> objects;

GameObject Mely pontok tartoznak hozzá: egyenlet Láthatóság: egyenlet megoldás Transzformáció: egyenlet megváltoztatás Triangle mesh: háromszög háló A felületi pont hogyan változtatja meg a fényt Shader: az interakció algoritmusa Material: az algoritmus paraméterei Textúra: a jellemzők változása az objektumon Műveletek: Control: játékfüggő Animate, Draw: általánosan is megoldható

Surface Shader Shader Volumetric Shader Material Texture Light La, Le, wlightpos * Scene Simulate() Build() * objects GameObject pos, velocity, acc Control() Animate() Draw() Avatar ProcInput() CamTransf() App onkeyboard() onkeyboardup() ondisplay() onidle() getkeystatus() TriangleMesh SpaceShip Planet Player LoadedMesh ParamSurface Bullet Explosion Game Engine Sphere Game

Animate: Affin transzformáció Eltolás, elforgatás, nyújtás, nyírás, tükrözés, Egyenest-egyenesbe, párhuzamosokat megtartja Háromszögeket háromszögekbe képez le (0, y) (0,1) (0,0) p =(x, y) (1,0) (x,0) T(0,y) T(0,1) T(0,0) T(1,0) T(p) = T(0,0)+(T(x,0)-T(0,0))+(T(0,y)-T(0,0)) = T(0,0)+x(T(1,0)-T(0,0))+y(T(0,1)-T(0,0)) = 1 o + xi + yj T(p) =(x, y ) T(x,0) x, y, 1 = [x, y, 1] i x i y 0 j x j y 0 o x o y 1

Draw: Hol látszhat/látszik Egy háromszög mely pixelekre vetül és azokban milyen messze van Minden pixelben a legközelebbit tartsuk meg. Depth buffer Világ koordinátarendszer

Szimulációs hurok (Game loop) tstart void Scene::Simulate ( ) { // idle call back static float tend = 0; float tstart = tend; tend = glutget(glut_elapsed_time); avatar->processinput( ); dt tend // Simulation for(float t = tstart; t < tend; t += dt) { float Dt = min(dt, tend t); for (GameObject * obj: objects) obj->control(t, t+dt); for (GameObject * obj: objects) obj->animate(t, t+dt); } } // Rendering glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); avatar->setcameratransform(state); for (GameObject * obj: objects) obj->draw(state); glutswapbuffers( );

Bolygó: Planet Geometria: gömb Textúra: 2D térkép Képletanimáció: beégetett pálya Többiek érdektelenek Nincs respektált törvény

Gömb: Triangle mesh z x U, V = c x + rcos U sin V y U, V = c y + rsin U sin V z U, V = c z + rcos V U 0,2π, V 0, π U,V 0 1 3 5 1 3 2 5 4 x cos(v) V 1 U sin(v) Pl. BME: V = 47,5º U = 19,0º y 0 2 4

Animate: A Föld forog és kering a Nap körül M = cos (f t) sin (f t) sin (f t) cos (f t) 0 0 0 0 0 0 0 0 1 0 0 1 D f t f: forgási szög sebesség k: keringési szög sebesség k t 1 0 0 cos (23 ) 0 sin(23 ) 0 0 0 0 sin(23 ) 0 cos (23 ) 0 0 1 1 0 0 1 0 0 D cos (k t) D sin(k t) 0 0 0 0 1 0 0 1

Az űrhajó: SpaceShip Komplex geometria négyszögháló Komplex textúra Fizikai animáció erők (gravitáció, rakéták) ütközések Viselkedés (AI) A rakéták vezérlése Ütközés elkerülés, avatártól menekülés, avatár üldözése

Űrhajó: Quad mesh

Űrhajó geometria Euler műveletek: csúcs + lap = él + 2

Űrhajó geometria

Űrhajó geometria

Űrhajó geometria

Űrhajó geometria: Subdivision surface

Űrhajó geometria: Subdivision surface

Textúrához paraméterezés (0,0) (1,1)

(AliasWavefront) OBJ fájlformátum v -0.708698-0.679666 2.277417 v 0.708698-0.679666 2.277417 v -0.735419 0.754681 2.256846... vt 0.510655 0.078673 vt 0.509594 0.070000 vt 0.496429 0.079059... vn -0.843091 0.000000 0.537771 vn -0.670151-0.543088 0.505918 vn -0.000000-0.783747 0.621081 f 65/1/1 37/2/2 62/3/3 61/4/4 f 70/8/5 45/217/6 67/218/7 66/241/8 f 75/9/9 57/10/10 72/11/11 71/12/12...

Animate: Newton 2 + Frenet frame k head: j k i i p j M = i 0 j 0 k 0 p 1 F = ma, a = dv dt, v = dp dt a = F m, v += adt, p += vdt Orientáció, nem ortonormált: j = v, k = k 1 α + aα, i = j k Gram-Schmidt ortogonalizáció: j = v/ v, i = j k / j k, k = i j

Control: az erő számítása és AI void Ship :: Control( float tstart, float tend ) { force = vec3(0, 0, 0); for (GameObject* obj: scene.objects) { if (dynamic_cast<planet*>(obj)) { F = f m M r 2 } if (dynamic_cast<avatar*>(obj)) { bullet } } } avatar avatar aiming angle

Ütközésdetektálás: lassú objektumok Probléma, ha az objektum gyors adott t t t + t dist = obj1.pos - obj2.pos min = obj1.boundingradius() + obj2.boundingradius() if (dist.length() < min) Collision!

Nagyon komplex geometria Hasonló kinézet minden irányból Könnyebb a képét használni átlátszó Foton torpedó: Bullet Ütközésdetektálás = gyors mozgás

Billboard Egyetlen félig átlátszó textúra egy téglalapon pos QUAD pos

Robbanás Nagyon komplex geometria Hasonló kinézet minden irányból Plakátgyűjtemény Részecske rendszer

Részecske rendszerek Globális erőtér (szél fújja a füstöt) Véletlen Kezdeti értékek pos: velocity: acceleration: lifetime age: size, dsize: weight, dweight: color, dcolor: pos += velocity * dt velocity += acceleration * dt acceleration = force / weight age += dt; if (age > lifetime) Kill(); size += dsize * dt; weight += dweight * dt color += dcolor * dt

Robbanás paraméterei Rand(mean, var) mean var pos = center; lifetime = Rand(2, 1); // kezdetben fókuszált size = 0.001; // kezdetben kicsi dsize = Rand(0.5, 0.25) / lifetime; velocity = Vector(Rand(0,0.4),Rand(0,0.4),Rand(0,0.4)); acceleration = Vector(Rand(0,1),Rand(0,1),Rand(0,1)); // Planck törvény: sárga átlátszatlanból vörös átlátszóba color = Color(1, Rand(0.5, 0.25), 0, 1 ); dcolor = Color(0, -0.25, 0, -1) / lifetime;

Klaviatúra kezelés: Polling bool keys[256]; // is pressed? void onkeyboard(unsigned char key, int px, int py) { keys[key] = true; } void onkeyboardup(unsigned char key, int px, int py) { keys[key] = false; } KeyboardFunc KeyboardUpFunc SpecialKeysFunc SpecialKeysUpFunc keys Avatar:: ProcessInput virtual world

Avatar :: ProcessInput right up head Avatar :: ProcessInput() { if ( keys[ ] ) // fire! objects.push_back(new Bullet(pos, velocity) // Kormányzás: az avatár koordinátarendszerében! vec3 head = normalize(velocity); vec3 right = normalize(cross(wvup, head)); vec3 up = cross(head, right); } if (keys[key_up]) force -= up; if (keys[key_down]) force += up; if (keys[key_left]) force -= right; if (keys[key_right]) force += right;