Signatur
Beschreibung
Die Eigenschaft pose eines VRFrameData-Objekts enthält ein VRPose-Objekt. Es beschreibt den Zustand des Headsets zum Zeitpunkt VRFrameData.timestamp: Position (position), Ausrichtung als Quaternion (orientation) sowie lineare und Winkelgeschwindigkeit bzw. -beschleunigung.
Den Wert erhältst du nicht direkt. Zuerst legst du mit new VRFrameData() ein wiederverwendbares Objekt an. Dann rufst du in jedem Frame VRDisplay.getFrameData(frameData) auf. Dabei werden pose und die Matrizen (leftViewMatrix, rightProjectionMatrix usw.) mit aktuellen Werten gefüllt.
Üblicherweise brauchst du die Pose für eigene Spiellogik, etwa um einen Blickstrahl (Raycast) zu berechnen, Objekte an den Kopf zu heften oder Bewegungen zu erkennen. Zum Rendern sind die fertigen View- und Projektionsmatrizen aus VRFrameData meist bequemer.
Rückgabewert
VRPose-Objekt mit position, orientation, linearVelocity, linearAcceleration, angularVelocity und angularAcceleration (jeweils Float32Array oder null).Beispiele
Pose in der Render-Schleife auslesen
const frameData = new VRFrameData();
const start = async () => {
const [vrDisplay] = await navigator.getVRDisplays();
if (!vrDisplay) return console.warn('Kein VR-Gerät gefunden');
const onFrame = () => {
vrDisplay.requestAnimationFrame(onFrame);
vrDisplay.getFrameData(frameData);
const { position, orientation } = frameData.pose;
console.log('Position:', position, 'Orientierung:', orientation);
};
vrDisplay.requestAnimationFrame(onFrame);
};
start();
Null-Werte sicher behandeln (3DoF-Geräte)
const getHeadPosition = (frameData) => {
const { position } = frameData.pose;
// Geräte ohne Positions-Tracking liefern null
return position ? Array.from(position) : [0, 1.6, 0];
};
const frameData = new VRFrameData();
console.log(getHeadPosition(frameData));
Blickrichtung aus dem Orientierungs-Quaternion berechnen
const forwardFromQuat = ([x, y, z, w]) => [
-2 * (x * z + w * y),
-2 * (y * z - w * x),
-(1 - 2 * (x * x + y * y))
];
const logGaze = (vrDisplay, frameData) => {
vrDisplay.getFrameData(frameData);
const { orientation } = frameData.pose;
if (orientation) {
console.log('Blickrichtung:', forwardFromQuat(orientation));
}
};
// Wichtig · Fallstricke
- Veraltet: Die WebVR-API ist abgekündigt und wurde aus fast allen Browsern entfernt. Früher gab es sie im Firefox (Desktop) und in Chrome nur hinter einem Flag bzw. als Origin Trial. Für neue Projekte solltest du WebXR nutzen (
XRFrame.getViewerPose()). - Das Objekt in
posekann zwischen Frames wiederverwendet werden. Wenn du Werte über mehrere Frames speichern willst, kopiere sie, z. B. mitArray.from(pose.position). - Die Werte sind erst gültig, nachdem
getFrameData()aufgerufen wurde. Davor und bei fehlendem Tracking können die Eigenschaftennullsein. - Positionen werden in Metern angegeben. Das Quaternion hat die Reihenfolge
[x, y, z, w]. - Die API steht nur in sicheren Kontexten (HTTPS) zur Verfügung.