XRView:eye 属性
XRView 接口的只读 **eye** 属性是一个字符串,用于指示 XRView 代表哪只眼睛的视点:left(左眼)或 right(右眼)。对于不代表任何一只眼睛的视图,例如单眼视图,此属性的值为 none。
值
一个可以为以下值之一的字符串
用法说明
此属性的主要目的是允许将任何预渲染立体内容(stereo content)的正确区域呈现给正确的眼睛。对于动态渲染的 3D 内容,您通常可以忽略此属性,并依次渲染查看者的每个视图。
示例
此代码来自查看器姿势 (viewer pose) 的渲染器,它会遍历姿势的视图并进行渲染。但是,我们有一些标志,如果为 true,则表示在游戏中某只眼睛受伤了。渲染该眼睛时,如果标志为 true,则跳过该视图而不进行渲染。
js
glLayer = xrSession.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_BUFFER_BIT);
for (const view of xrPose.views) {
let skipView = false;
if (view.eye === "left" && body.leftEye.injured) {
skipView = updateInjury(body.leftEye);
} else if (view.eye === "right" && body.rightEye.injured) {
skipView = updateInjury(body.rightEye);
}
if (!skipView) {
let viewport = glLayer.getViewport(view);
gl.viewport(viewport.x, viewport.y, viewport.width, viewport.height);
renderScene(gl, view);
}
}
对于每个视图,都会检查 eye 的值,如果它为 left 或 right,我们就会检查 body.leftEye.injured 或 body.rightEye.injured 属性是否为 true;如果是,我们就会在该眼睛上调用 updateInjury() 函数,以根据游戏需求执行诸如允许少量治愈、追踪中毒效果的进度等操作。
updateInjury() 返回 true 表示眼睛仍然受伤,或者返回 false 表示眼睛已通过该函数恢复健康。如果结果为 false(表示眼睛现在健康),我们则为该眼睛渲染场景。否则,不渲染。
规范
| 规范 |
|---|
| WebXR Device API # dom-xrview-eye |
浏览器兼容性
加载中…