--- title: WebVR API slug: Web/API/WebVR_API tags: - API - Experimental - Expérimental(2) - Landing - NeedsTranslation - Reference - Référence(2) - TopicStub - VR - Virtual Reality - WebVR translation_of: Web/API/WebVR_API ---

{{SeeCompatTable}}{{APIRef("WebVR API")}}

WebVR -rajapinta tarjoaa tuen VR-laitteiden — kuten Oculus Rift tai HTC Vive -silmikoiden — käyttämiseen webbisovelluksille, jolloin kehittäjät voivat muuttaa silmikolta saadun sijainti- ja liiketiedon 3D-skenessä liikkumistiedoksi. Tämä mahdollistaa useita kiinnostavia sovellusmahdollisuuksia aina virtuaalisista tuote-esittelyistä ja interaktiivisista treenisovelluksista immersiivisiin FPS-räiskintäpeleihin.

Perusperiaatteet ja käyttö

Metodi {{domxref("Navigator.getVRDisplays()")}} hakee kaikki tietokoneeseen liitetyt VR-laitteet; jokaista näistä vastaa {{domxref("VRDisplay")}} -tyyppinen objekti.

Sketch of a person in a chair with wearing goggles labelled "Head mounted display (HMD)" facing a monitor with a webcam labelled "Position sensor"

{{domxref("VRDisplay")}} on perusrajapinta WebVR API:in — sen ominaisuuksien ja metodien avulla voit esimerkiksi:

Tyypillinen (yksinkertainen) WebVR-sovellus toimisi esimerkiksi näin:

  1. {{domxref("Navigator.getVRDisplays()")}} -metodilla haetaan viittaus VR-näyttöön.
  2. {{domxref("VRDisplay.requestPresent()")}} -metodilla käynnistetään näyttäminen.
  3. WebVR:n omalla versiolla {{domxref("VRDisplay.requestAnimationFrame()")}} -methodista suoritetaan sovelluksen renderöintisilmukkaa näytölle sopivalla virkistystaajuudella.
  4. Renderöintisilmukassa haetaan ruudun näyttämiseen tarvittavat tiedot ({{domxref("VRDisplay.getFrameData()")}}) -metodilla, piirretään näytettävä skene kaksi kertaa — siis kerran molemmille silmille, ja sen jälkeen toimitetaan renderöity näkymä näytölle käyttäjälle näytettäväksi metodilla ({{domxref("VRDisplay.submitFrame()")}}).

Tämän lisäksi WebVR 1.1 lisää useita tapahtumia (event) {{domxref("Window")}} -objektiin, jolloin JavaScriptillä voidaan reagoida näytön tilan muutoksiin.

Huom: APIn toiminnasta löytyy paljon lisätietoa artikkeleista Using the WebVR API ja WebVR Concepts.

Ohjaimien käyttö: WebVR:n yhdistäminen Gamepad API:in

Useissa WebVR-laitekokoonpanoissa silmikon mukana on käytettävissä erillinen ohjain. Ohjaimia voidaan käyttää WebVR-sovelluksissa Gamepad API:n kautta, ja erityisesti Gamepad Extensions API:n, joka lisää mukaan ohjaimen asentotiedon (controller pose), tuntoperusteiset laitteet (haptic actuators) ja muita vastaavia.

Huom: Artikkeli Using VR controllers with WebVR selittää perusteet VR-ohjaimien käytöstä WebVR-sovelluksissa.

WebVR rajapinnat

{{domxref("VRDisplay")}}
Edustaa mitä tahnsa APIn tukemaa VR-laitetta. Siinä on mukana yleistiedot laittesta, kuten laitteen tunnisteet (ID) ja kuvaukset sekä metodit VR-skenen esittämisen käynnistämiseen, silmäparametrien ja näytön ominaisuuksien hakemiseen ja muut olennaiset toiminnat.
{{domxref("VRDisplayCapabilities")}}
Esittää {{domxref("VRDisplay")}}:n ominaisuudet — näillä voidaan testata, saako laitteelta esimerkiksi sijaintitietoa.
{{domxref("VRDisplayEvent")}}
Edustaa WebVR-kohtaisen tapahtuman tapahtumaobjektia (kts. {{anch("Window", "window object extensions")}} alempana).
{{domxref("VRFrameData")}}
Vastaa kaikkea tietoa, mitä yksittäisen VR-skenen ruudun renderöintiin tarvitaan; metodi {{domxref("VRDisplay.getFrameData()")}} hakee nämä tiedot.
{{domxref("VRPose")}}
Edustaa tietyllä ajanhetkellä vallitsevaa sijaintitietoa (johon kuuluvat suunta, sijainti, nopeus ja kiihtyvyys.)
{{domxref("VREyeParameters")}}
Tarjoaa pääsyn kaikkeen tietoon, joka tarvitaan skenen renderöintiin oikein kullekin silmälle, esimerkiksi näkökentän laajuuden.
{{domxref("VRFieldOfView")}}
Näkökenttätieto, joka on määritelty keskipisteestä katsottuna neljällä asteluvulla.
{{domxref("VRLayerInit")}}
Tämä on {{domxref("VRDisplay")}}-näytöllä esitettävä kuvan eräs taso (layer).
{{domxref("VRStageParameters")}}
Huoneskaalaa tukevien laitteiden kanssa käytettävissä sovelluksissa "näyttämöalueen" tiedot löytyvät tästä.

Laajennukset muihin rajapintoihin

WebVR API laajentaa joitakin API-rajapintoja lisäten seuraavat ominaisuudet.

Gamepad

{{domxref("Gamepad.displayId")}} {{readonlyInline}}
Palauttaa liitetyn {{domxref("VRDisplay")}} tunnisteen {{domxref("VRDisplay.displayId")}} — VRDisplay , jonka skeneä gamepad ohjaa.
{{domxref("Navigator.activeVRDisplays")}} {{readonlyInline}}
Palauttaa taulukon, jossa on mukana jokainen {{domxref("VRDisplay")}}, joka esittää parhaillaan ({{domxref("VRDisplay.ispresenting")}} on true).
{{domxref("Navigator.getVRDisplays()")}}
Palauttaa promise-objektin, joka sisältää taulukon {{domxref("VRDisplay")}} objekteja, jotka vastaavat kaikkia tietokoneeseen liitettyjä VR-näyttöjä.

Window-tapahtumat

{{domxref("Window.onvrdisplaypresentchange")}}
Edustaa tapahtumankäsittelijää (event handler), joka suoritetaan, kun VR_näytön esittämistila muuttuu — esimerkiksi tilasta 'esittää' tilaan 'ei esitä' tai päinvastoin (kun tapahtuma {{event("vrdisplaypresentchange")}} signaloidaan).
{{domxref("Window.onvrdisplayconnect")}}
Tämä tapahtumankäsittelijä suoritetaan, kun yhteensopiva VR-näyttö on kytketty tietokoneeseen (tapahtuma {{event("vrdisplayconnect")}} ).
{{domxref("Window.onvrdisplaydisconnect")}}
Tämä tapahtumankäsittelijä suoritetaan, kun yhteensopiva VR-näyttö irrotetaan tietokoneesta (kun tapahtuma {{event("vrdisplaydisconnect")}} signaloidaan).
{{domxref("Window.onvrdisplayactivate")}}
Edustaa taphtumaa, joka suoritetaan, kun näyttö on valmis esittämään sisältöä (tapahtuma {{event("vrdisplayactivate")}} ),esimerkiksi kun silmikko aktivoituu virransäästötilasta tai puetaan päälle.
{{domxref("Window.onvrdisplaydeactivate")}}
Tämä tapahtumankäsittelijä suoritetaan, kun näytölle ei voi enää esittää sisältöä (kun tapahtuma {{event("vrdisplaydeactivate")}} signaloidaan), esimerkiksi syystä, että silmikkonäyttö on siirtynyt virransäästötilaan käyttämättömyyden vuoksi.

Window:n tapahtumat, jotka eivät ole käytettävissä

Seuraavat tapahtumat löytyvät APIn määrittelystä, mutta niiden toteutusta ei tunnu vielä löytyvän mistään selaimista.

{{domxref("Window.onvrdisplayblur")}}
Edustaa tapahtumankäsittelijää, joka suoritetaan kun selain, käyttöjärjestelmä tai VR-laitteisto on keskeyttänyt esittämisen näytölle jostain syystä (tapahtuman {{event("vrdisplayblur")}} johdosta) — esimerkiksi käytettäessä järjestelmän valikkoa tai selainta. Tarkoitus on estää seurantaa tai VR-kokemuksen menetystä.
{{domxref("Window.onvrdisplayfocus")}}
Tämä tapahtumankäsittelijä suoritetaan, kun esittäminen näytöllä palautuu edellisen tapahtuman jälkeen (tapahtumasta {{event("vrdisplayfocus")}} ).

Esimerkkejä

Näiltä sivustoilta töydät useita esimerkkejä:

Spesifikaatiot

Specification Status Comment
{{SpecName("GamepadExtensions")}} {{Spec2("GamepadExtensions")}} Määrittää Experimental Gamepad extensions.
{{SpecName('WebVR 1.1')}} {{Spec2('WebVR 1.1')}} Alkuperäinen

Selainyhteensopivuus

{{CompatibilityTable}}

Ominaisuus Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Perus {{CompatNo}}[1] {{CompatVersionUnknown}} {{CompatGeckoDesktop(55)}}[2] {{CompatNo}} {{CompatNo}} {{CompatNo}}
Gamepad -laajennukset {{CompatNo}} {{CompatNo}} {{CompatNo}}[4] {{CompatNo}} {{CompatNo}} {{CompatNo}}
Feature Android Edge Firefox Mobile (Gecko) IE Phone Opera Mobile Safari Mobile Chrome for Android Samsung Internet for GearVR
Basic support {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatVersionUnknown}}[3] {{CompatVersionUnknown}}
 
Gamepad extensions {{CompatNo}} {{CompatNo}} {{CompatNo}}[4] {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}} {{CompatNo}}

[1] API käytettävissä (Available) kaikilla alustoilla lipulla, mutta tällä hetkellä toimii ainoastaan kokeellisessa työpöytäversiossa (experimental version of Chrome) (muut versiot eivät palauta yhtään laitetta metodia {{domxref("Navigator.getVRDisplays()")}} kutsuttaessa).

[2] Tällä hetkellä ainoastaan Windows ja Mac OSX tuki on oletuksena päällä.

[3] Nyt ainoastaan laitteella Google Daydream.

[4] Päällä Firefox Nightly ja Beta -versioissa 55 ja uudempi. Käytetään valinnalla dom.gamepad-extensions.enabled.

Katso myös