我们的志愿者还没有将这篇文章翻译为 中文 (简体)。加入我们帮助完成翻译!
您也可以阅读此文章的English (US)版。
This is an experimental technology
Because this technology's specification has not stabilized, check the compatibility table for usage in various browsers. Also note that the syntax and behavior of an experimental technology is subject to change in future versions of browsers as the specification changes.
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()
.
Constructor
VRFrameData.VRFrameData()
- Creates a
VRFrameData
object instance.
Properties
VRFrameData.leftProjectionMatrix
Read only- A
Float32Array
representing a 4x4 matrix that describes the projection to be used for the left eye’s rendering. VRFrameData.leftViewMatrix
Read only- A
Float32Array
representing a 4x4 matrix that describes the view transform to be used for the left eye’s rendering. VRFrameData.pose
Read only- The
VRPose
of theVRDisplay
at the currentVRFrameData.timestamp
. VRFrameData.rightProjectionMatrix
Read only- A
Float32Array
representing a 4x4 matrix that describes the projection to be used for the right eye’s rendering. VRFrameData.rightViewMatrix
Read only- A
Float32Array
representing a 4x4 matrix that describes the view transform to be used for the right eye’s rendering. VRFrameData.timestamp
Read only- A constantly increasing timestamp value representing the time a frame update occurred.
Examples
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.
Specifications
Specification | Status | Comment |
---|---|---|
WebVR 1.1 The definition of 'VRDisplayEvent' in that specification. |
Editor's Draft | Initial definition |
Browser compatibility
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
leftProjectionMatrix | (Yes)1 2 | (Yes) | 553 | No | ? | ? |
leftViewMatrix | (Yes)1 2 | (Yes) | 553 | No | ? | ? |
pose | (Yes)1 2 | (Yes) | 553 | No | ? | ? |
rightProjectionMatrix | (Yes)1 2 | (Yes) | 553 | No | ? | ? |
rightViewMatrix | (Yes)1 2 | (Yes) | 553 | No | ? | ? |
timestamp | (Yes)1 2 | (Yes) | 553 | No | ? | ? |
VRFrameData | (Yes)1 2 | (Yes) | 553 | No | ? | ? |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
leftProjectionMatrix | No | (Yes)4 | ? | ? | No | ? | ? |
leftViewMatrix | No | (Yes)4 | ? | ? | No | ? | ? |
pose | No | (Yes)4 | ? | ? | No | ? | ? |
rightProjectionMatrix | No | (Yes)4 | ? | ? | No | ? | ? |
rightViewMatrix | No | (Yes)4 | ? | ? | No | ? | ? |
timestamp | No | (Yes)4 | ? | ? | No | ? | ? |
VRFrameData | No | (Yes)4 | ? | ? | No | ? | ? |
1. Only works on desktop in an experimental version of Chrome (other builds won't return any devices when Navigator.getVRDisplays()
is invoked).
2. , this feature is behind the WebVR
preference. To change preferences in Chrome, visit chrome://flags.
3. Currently only Windows support is enabled by default. Mac support is available in Firefox Nightly.
4. Currently supported only by Google Daydream.
See also
- WebVR API homepage
- MozVr.com — demos, downloads, and other resources from the Mozilla VR team.