安全上下文
此特征只可用于
安全上下文
(HTTPS),在某些或所有
支持浏览器
.
XRWebGLLayer
接口的
getViewport()
方法返回
XRViewport
that should be used to render the specified
XRView
into the WebGL layer.
For WebXR devices which use a single framebuffer for both the left and right eyes, the returned viewport represents the region of the framebuffer into which the scene should be rendered for the eye represented by the view.
let viewport = xrWebGLLayer.getViewport(view);
view
XRView
object indicating the view for which the viewport is to be returned.
A
XRViewport
object representing the viewport which will restrict drawing to the portion of the layer corresponding to the specified
view
.
InvalidStateError
view
is not in an active
XRFrame
or that
XRFrame
和
XRWebGLLayer
are not part of the same
WebXR session
.
This example demonstrates in part what the callback for the
requestAnimationFrame()
function might look like, using
getViewport()
to get the viewport so that drawing can be constrained to the area set aside for the eye whose viewpoint is currently being rendered.
This works because the set of views returned by an
XRViewerPose
each represent one eye's perspective on the scene. Since the framebuffer is split in half, one half for each eye, setting the WebGL viewport to match the WebXR layer's viewport will ensure that when rendering the scene for the current eye's pose, it is rendered into the correct half of the framebuffer.
<<<--- add link to appropriate section in the Cameras and views article --->>>
function drawFrame(time, frame) {
let session = frame.session;
let pose = frame.getViewerPose(mainReferenceSpace);
if (pose) {
let glLayer = session.renderState.baseLayer;
gl.bindFramebuffer(gl.FRAMEBUFFER, glLayer.framebuffer);
gl.clearColor(0, 0, 0, 1.0);
gl.clearDepth(1.0);
gl.clear(gl.COLOR_BUFFER_BIT, gl.DEPTH_COLOR_BIT);
for (let view of pose.views) {
let viewport = glLayer.getViewport(view);
gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
/* Render the scene now */
}
}
| 规范 | 状态 | 注释 |
|---|---|---|
|
WebXR 设备 API
The definition of 'XRWebGLLayer.getViewport()' in that specification. |
工作草案 | 初始定义。 |
| 桌面 | 移动 | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
getViewport()
|
Chrome 79 | Edge 79 | Firefox No | IE No | Opera No | Safari No | WebView Android No | Chrome Android 79 | Firefox Android No | Opera Android No | Safari iOS No | Samsung Internet Android 11.2 |
完整支持
不支持
XRWebGLLayer
getViewport()
Navigator.xr
WebGLRenderingContext.makeXRCompatible()
XR
XRBoundedReferenceSpace
XRFrame
XRInputSource
XRInputSourceArray
XRInputSourceEvent
XRInputSourcesChangeEvent
XRPose
XRReferenceSpace
XRReferenceSpaceEvent
XRRenderState
XRRigidTransform
XRSession
XRSessionEvent
XRSpace
XRView
XRViewerPose
XRViewport