Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
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 0° 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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.