PositionSensorVRDevice: getImmediateState()-Methode

Veraltet: Diese Funktion wird nicht mehr empfohlen. Obwohl einige Browser sie möglicherweise noch unterstützen, kann sie bereits aus den relevanten Webstandards entfernt worden sein, befindet sich im Prozess der Entfernung oder wird nur aus Kompatibilitätsgründen beibehalten. Vermeiden Sie die Verwendung und aktualisieren Sie gegebenenfalls bestehenden Code; siehe die Kompatibilitätstabelle am Ende dieser Seite, um Ihre Entscheidung zu treffen. Beachten Sie, dass diese Funktion jederzeit nicht mehr funktionieren kann.

Kein Standard: Diese Funktion ist nicht standardisiert und befindet sich nicht im Standardisierungsprozess. Verwenden Sie sie nicht auf Produktionsseiten, die auf das Web ausgerichtet sind: Sie wird nicht für alle Benutzer funktionieren. Außerdem kann es große Inkompatibilitäten zwischen Implementierungen geben und das Verhalten kann sich in Zukunft ändern.

Die getImmediateState()-Methode der VRDisplay-Schnittstelle gibt den aktuellen, momentanen Zustand des Positionssensors zurück. Dies ist nur selten vorgesehen, für bestimmte spezielle Anwendungsfälle, beispielsweise um die unmittelbare Position eines Handorientierungssensors abzutasten — oder es wird zumindest in Zukunft so sein.

Für die meisten Standardanwendungen sollten Sie wahrscheinlich stattdessen PositionSensorVRDevice.getState verwenden.

Syntax

js
getImmediateState()

Parameter

Keine.

Rückgabewert

Ein VRPose-Objekt.

Beispiele

Das folgende Demo verwendet die WebVR API, um die Ansicht einer einfachen Szene mit CanvasRenderingContext2D in jedem Frame einer requestAnimationFrame-Schleife zu aktualisieren. Die Hauptfunktion, die die Ansichts-Daten aktualisiert, ist wie folgt:

js
function setView() {
  const posState = gPositionSensor.getImmediateState();
  if (posState.hasPosition) {
    posPara.textContent = `Position: x${roundToTwo(
      posState.position.x,
    )} y${roundToTwo(posState.position.y)} z${roundToTwo(posState.position.z)}`;
    xPos = -posState.position.x * WIDTH * 2;
    yPos = posState.position.y * HEIGHT * 2;
    zPos = -posState.position.z > 0.01 ? -posState.position.z : 0.01;
  }

  if (posState.hasOrientation) {
    orientPara.textContent = `Orientation: x${roundToTwo(
      posState.orientation.x,
    )} y${roundToTwo(posState.orientation.y)} z${roundToTwo(
      posState.orientation.z,
    )}`;
    xOrient = posState.orientation.x * WIDTH;
    yOrient = -posState.orientation.y * HEIGHT * 2;
    zOrient = posState.orientation.z * 180;
  }
}

Hier erfassen wir ein VRPose-Objekt mit getImmediateState() und speichern es in posState (das eigentliche Live-Demo verwendet getState(), aber beide scheinen aktuell das Gleiche zu tun). Wir überprüfen dann, ob Positions- und Orientierungsinformationen im aktuellen Frame vorhanden sind, indem wir VRPose.position und VRPose.orientation verwenden (diese geben null zurück, wenn beispielsweise das Head-Mounted Display ausgeschaltet ist oder nicht auf den Positionssensor gezeigt wird, was einen Fehler verursachen würde).

Wir geben dann die x-, y- und z-Positionen sowie Orientierungswerte zu Informationszwecken aus und verwenden diese Werte, um die Variablen xPos, yPos, zPos, xOrient, yOrient und zOrient zu aktualisieren, die verwendet werden, um das Szenen-Rendering in jedem Frame zu aktualisieren.

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch