Three.js, zobrazování HUD prvků

Kompas

Vzhled a chování

Kompas zobrazující směr pohledu hráče je umístěn v levém rohu obrazovky. Kompas je zobrazen jako výseč kruhové stupnice s hodnotami od 0 do 360. Hodnoty jsou odstupňovány po 10. Znaky světových stran (N, S, W, E) jsou umístěny pod číselnými hodnotami směru pohledu. Nad číselnými hodnotami směru se nachází čárkovaná stupnice, kde aktuální hodnota směru pohledu je indikována pomocí zelené šipky.

See the Pen HUD_Compass by Filip Mička (@Filda360) on CodePen.

Ukázka výsledného HUD prvku zobrazující kompas v CodePen

Popis implementace

HUD prvek kompasu byl realizován pomocí HTML elementů. V těle HTML dokumentu byly vytvořeny kontejnery pro obrázky (compassBox). Bylo využito obrázku kruhového kompasu, který byl upraven do požadované podoby. Obrázku byla změněna barva na bílou a čárky na pozici světových stran (N, S, W, E) byly přebarveny do červena. Dále byly také doplněny znaky světových stran tak, aby byl vždy čitelný znak na vrchní části obrázku (i při otočení obrázkem). Druhý obrázek má stejné rozměry.V horní části jinak průhledného obrázku se nachází malá zelená šipka. Kontejnery s obrázky jsou pomocí CSS stylů umístěny do levého horního rohu obrazovky. Kontejnerům je také nastavena vlastnost clipPath tak, aby byla viditelná pouze horní výseč obrázku a zbytek byl průhledný. (obrázek níže)

Nákres nastavení vlastnosti clipPath

V kódu JavaScriptu je funkce animate. Tato funkce je volána vždy při obnově snímku. V této funkci je dále volána funkce calculateAngle, jejíž výsledek je uložen do proměnné angleOfCameraView a reprezentuje úhel směru pohledu kamery. Podle této proměnné je následně obrázek kompasu pootočen o patřičný úhel (nastevení vlastnosti transform).

Ve funkci calculateAngle je nejprve zjištěn vektor směru pohledu kamery pomocí metody getWorldDirection objektu kamery.

Vlastnost theta objektu třídy Spherical je nastavena pomocí metody setFromVector3, kdy je jako parametr metody uveden vektor směru pohledu kamery. Pomocí vlastnosti theta lze získat úhel směru pohledu kamery ve smyslu osy X a Z. Vlastnost theta nabývá hodnot od do π. Na obrázku níže je znázorněn význam hodnot vlastnosti theta.

Nákres princip využití vlastnosti theta

Návratovou hodnotou funkce calculateAngle je hodnota vlastnosti theta vynásobená číslem 180/π pro převod z radiánů na stupně. K této hodnotě je ještě přičtena hodnota 180. Tímto je docíleno toho, že návratové hodnoty funkce jsou od 0 do 360, kdy hodnota 0 nastává při pohledu kamery v záporném směru osy Z (výchozí pozice kamery). Při otočením kamerou doprava hodnoty úhlu rostou. Při přechodu hodnoty 360 dochází k vynulování hodnoty úhlu.

Použité zdroje

[1] Zdrojový kód pro výpočet směru kamery převzat z: https://discourse.threejs.org/t/adding-compass-to-the-scene/8727 a upraven autorem.

[2] Zdroj obrázku kompasu, upraven autorem: http://www.clker.com/clipart-40401.html

[3] Prostředí ukázky převzato z: https://threejs.org/examples/?q=fps#games_fps