This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The VRFrameData interface of the WebVR API represents all the information needed to render a single frame of a VR scene; constructed by VRDisplay.getFrameData().
VRFrameData.VRFrameData()VRFrameData object instance.VRFrameData.leftProjectionMatrix Read only
Float32Array representing a 4x4 matrix that describes the projection to be used for the left eye’s rendering.VRFrameData.leftViewMatrix Read only
Float32Array representing a 4x4 matrix that describes the view transform to be used for the left eye’s rendering.VRFrameData.pose Read only
VRPose of the VRDisplay at the current VRFrameData.timestamp.VRFrameData.rightProjectionMatrix Read only
Float32Array representing a 4x4 matrix that describes the projection to be used for the right eye’s rendering.VRFrameData.rightViewMatrix Read only
Float32Array representing a 4x4 matrix that describes the view transform to be used for the right eye’s rendering.VRFrameData.timestamp Read only
var frameData = new VRFrameData();
var vrDisplay;
navigator.getVRDisplays().then(function(displays) {
vrDisplay = displays[0];
console.log('Display found');
// Starting the presentation when the button is clicked: It can only be called in response to a user gesture
btn.addEventListener('click', function() {
vrDisplay.requestPresent([{ source: canvas }]).then(function() {
drawVRScene();
});
});
});
// WebVR: Draw the scene for the WebVR display.
function drawVRScene() {
// WebVR: Request the next frame of the animation
vrSceneFrame = vrDisplay.requestAnimationFrame(drawVRScene);
// Populate frameData with the data of the next frame to display
vrDisplay.getFrameData(frameData);
// You can get the position, orientation, etc. of the display from the current frame's pose
// curFramePose is a VRPose object
var curFramePose = frameData.pose;
var curPos = curFramePose.position;
var curOrient = curFramePose.orientation;
// Clear the canvas before we start drawing on it.
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// WebVR: Create the required projection and view matrix locations needed
// for passing into the uniformMatrix4fv methods below
var projectionMatrixLocation = gl.getUniformLocation(shaderProgram, "projMatrix");
var viewMatrixLocation = gl.getUniformLocation(shaderProgram, "viewMatrix");
// WebVR: Render the left eye’s view to the left half of the canvas
gl.viewport(0, 0, canvas.width * 0.5, canvas.height);
gl.uniformMatrix4fv(projectionMatrixLocation, false, frameData.leftProjectionMatrix);
gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.leftViewMatrix);
drawGeometry();
// WebVR: Render the right eye’s view to the right half of the canvas
gl.viewport(canvas.width * 0.5, 0, canvas.width * 0.5, canvas.height);
gl.uniformMatrix4fv(projectionMatrixLocation, false, frameData.rightProjectionMatrix);
gl.uniformMatrix4fv(viewMatrixLocation, false, frameData.rightViewMatrix);
drawGeometry();
function drawGeometry() {
// draw the view for each eye
}
...
// WebVR: Indicate that we are ready to present the rendered frame to the VR display
vrDisplay.submitFrame();
} Note: You can see this complete code at raw-webgl-example.
| Specification | Status | Comment |
|---|---|---|
| WebVR 1.1 The definition of 'VRDisplayEvent' in that specification. | Draft | Initial definition |
| Desktop | ||||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | |
| Basic support | No | Yes | 55
|
No | ? | ? |
VRFrameData() constructor
|
No | Yes | 55
|
No | ? | ? |
leftProjectionMatrix
|
No | 15 | 55
|
No | ? | ? |
leftViewMatrix
|
No | 15 | 55
|
No | ? | ? |
pose
|
No | 15 | 55
|
No | ? | ? |
rightProjectionMatrix
|
No | 15 | 55
|
No | ? | ? |
rightViewMatrix
|
No | 15 | 55
|
No | ? | ? |
timestamp
|
No | 15 | 55
|
No | ? | ? |
| Mobile | |||||||
|---|---|---|---|---|---|---|---|
| Android webview | Chrome for Android | Edge Mobile | Firefox for Android | Opera for Android | iOS Safari | Samsung Internet | |
| Basic support | No | 56
|
? | ? | ? | ? | 6.0 |
VRFrameData() constructor
|
No | 56
|
? | ? | ? | ? | 6.0 |
leftProjectionMatrix
|
No | 56
|
? | ? | ? | ? | 6.0 |
leftViewMatrix
|
No | 56
|
? | ? | ? | ? | 6.0 |
pose
|
No | 56
|
? | ? | ? | ? | 6.0 |
rightProjectionMatrix
|
No | 56
|
? | ? | ? | ? | 6.0 |
rightViewMatrix
|
No | 56
|
? | ? | ? | ? | 6.0 |
timestamp
|
No | 56
|
? | ? | ? | ? | 6.0 |
© 2005–2018 Mozilla Developer Network and individual contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/VRFrameData