Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Prezentace projektu z předmětu PGRF2

Podobné prezentace


Prezentace na téma: "Prezentace projektu z předmětu PGRF2"— Transkript prezentace:

1 Prezentace projektu z předmětu PGRF2
Téma: Bludiště Miroslav Pokorný

2 Obsah prezentace Reprezentace světa Řešení kolizí Sprite grafika
Nepřátelé a viditelnost

3 Reprezentace světa „Dvourozměrný“ (není možný pohyb ve vertikální ose)
Kolmý (všechny stěny jsou na sebe kolmé) Reprezentace pomocí matice WorldObject[][] staticWorld = new WorldObject[WIDTH][HEIGHT]; [0,0] Width Height 1,0 2,0 0,0 4,0 5,0 3,0 1,1 2,1 0,1 4,1 5,1 3,1 1,2 2,2 0,2 4,2 5,2 3,2 1,3 2,3 0,3 4,3 5,3 3,3 1,4 2,4 0,4 4,4 5,4 3,4 6,0 6,1 6,2 6,3 6,4

4 Řešení kolizí WorldObject  vlastnost „clip“ (určuje, zda je daný objekt neprůchozí) Hráč na pozici: 2.5;1.5 Pohyb v kladné ose X a Z Kolize může nastat pouze s objektem na [2,2] nebo [3,1] [0,0] Width Height 1,0 2,0 0,0 4,0 5,0 3,0 1,1 2,1 0,1 4,1 5,1 3,1 1,2 2,2 0,2 4,2 5,2 3,2 1,3 2,3 0,3 4,3 5,3 3,3 1,4 2,4 0,4 4,4 5,4 3,4 6,0 6,1 6,2 6,3 6,4 [0,0] Width Height 1,0 2,0 0,0 4,0 5,0 3,0 1,1 2,1 0,1 4,1 5,1 3,1 1,2 2,2 0,2 4,2 5,2 3,2 1,3 2,3 0,3 4,3 5,3 3,3 1,4 2,4 0,4 4,4 5,4 3,4 6,0 6,1 6,2 6,3 6,4

5 Řešení kolizí (v ose X) Pokud: PoziceX + krok + tolerance > PoziceX
možnost kolize Kontrola objektu na pozici [PoziceX + 1][PoziceZ] Pokud objekt není null a zároveň je Clip tak pohyb nebude proveden private double collisionMoveX(double step) { double z = player.getPositionZ(); double x = player.getPositionX(); if (step > 0) { if ((int) x < (int) (x + step + player.STEP/2)) { if ((int) (x + step + player.STEP/2) > WIDTH - 1) return 0; WorldObject next = staticWorld[(int) (x + step + player.STEP/2)][(int) z]; if (next != null && next.isClip()) return 0; } } else { //řešení pro pohyb v ose -X } return step; }

6 Sprite grafika Na mapování „poloprůhledné“ textury na Quad
Quad je nutné rotovat (podle počátku v ose Y) na základě azimutu hráče Vytváří „pseudo“ 3D efekt  2D objekt ve 3D +45°

7 Problém spritů Dříve vykreslené sprity zakryjí později vykreslené sprity Před vykreslením je nutné seřadit sprity podle vzdálenosti od hráče Aby sprite nezakryly část světa, je nutné je vykreslovat až nakonec

8 Nepřátelé (viditelnost)
Problém, jak zjistit zda může být hráč spatřen nepřítelem? Nepřítel je natočen ve světě pod nějakým úhlem (eAzimut) Nepřítel vidí v zorném úhlu FOV Pokud: α – 0.5*FOV <= eAzimut <= α + 0.5*FOV  Hráč může být spatřen α 90° v dz dx X Z 𝛼= sin −1 𝑑𝑥 𝑣 𝑣= 𝑑𝑥 2 + 𝑑𝑧 2 X Z α = 90°-α α = 90°+α α = 270°-α α = 270°+α α 90° v dz dx 180° 270°

9 Nepřátelé (viditelnost) [2]
Interpolace po přeponě pravoúhlého trojúhelníku Dostatečné množství dělení Pokud při testu objektu na pozici [iX,iZ] se zjistí, že je neprůhledný bude vráceno FALSE, pokud celá interpolace nezjistí neprůhledný objekt bude vrácena hodnota TRUE [0,0] X Z 1,0 2,0 0,0 4,0 5,0 3,0 1,1 2,1 0,1 4,1 5,1 3,1 1,2 2,2 0,2 4,2 5,2 3,2 1,3 2,3 0,3 4,3 5,3 3,3 1,4 2,4 0,4 4,4 5,4 3,4 6,0 6,1 6,2 6,3 6,4 Nepřítel na pozici [2,1] hráče nevidí Nepřítel na pozici [3,4] hráče vidí

10 Prostor pro dotazy Děkuji za pozornost


Stáhnout ppt "Prezentace projektu z předmětu PGRF2"

Podobné prezentace


Reklamy Google