XRWebGLBinding:createEquirectLayer() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

createEquirectLayer() 方法是 XRWebGLBinding 介面的一部分,它返回一個 XREquirectLayer 物件。該物件是一個圖層,用於將 等距柱狀投影 編碼的資料對映到球體的內部。

語法

js
createEquirectLayer(options)

引數

options

一個用於配置 XREquirectLayer 的物件。它必須包含 spaceviewPixelHeightviewPixelWidth 屬性。init 具有以下屬性:

centralHorizontalAngle 可選

一個數字,表示球體的中心水平角度(以弧度為單位)。預設值為 6.28318 (2π)。

colorFormat 可選

一個 GLenum,用於定義顏色紋理資料的型別。可能的值:

  • gl.RGB
  • gl.RGBA 此外,對於啟用了 EXT_sRGB 擴充套件的上下文:
  • ext.SRGB_EXT
  • ext.SRGB_ALPHA_EXT 此外,對於 WebGL2RenderingContext 上下文:
  • gl.RGBA8
  • gl.RGB8
  • gl.SRGB8
  • gl.RGB8_ALPHA8 此外,對於啟用了 WEBGL_compressed_texture_etc 擴充套件的上下文:
  • ext.COMPRESSED_RGB8_ETC2
  • ext.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
  • ext.COMPRESSED_RGBA8_ETC2_EAC
  • ext.COMPRESSED_SRGB8_ETC2
  • ext.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
  • ext.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 此外,對於啟用了 WEBGL_compressed_texture_astc 擴充套件的上下文:
  • 擴充套件支援的 *所有* 格式。預設值為 gl.RGBA
depthFormat 可選

一個 GLenum,用於定義深度紋理資料的型別,或者 0 表示該圖層不應提供深度紋理(在這種情況下,XRProjectionLayer.ignoreDepthValues 將為 true)。在啟用了 WEBGL_depth_texture 擴充套件的 WebGLRenderingContext 上下文中,或在 WebGL2RenderingContext 上下文中(無需擴充套件)可能的值:

  • gl.DEPTH_COMPONENT
  • gl.DEPTH_STENCIL 此外,對於 WebGL2RenderingContext 上下文:
  • gl.DEPTH_COMPONENT24
  • gl.DEPTH24_STENCIL24 預設值為 gl.DEPTH_COMPONENT
isStatic 可選

一個布林值,如果為 true,則表示您只能在該圖層的 needsRedrawtrue 時進行繪製。預設值為 false

layout 可選

一個字串,指示圖層的佈局。可能的值:

default

該圖層支援會話的所有檢視。

mono

分配一個 XRSubImage 物件,並將其呈現給雙眼。

stereo

使用者代理決定如何分配 XRSubImage(一個或兩個)以及佈局(上下或左右)。

stereo-left-right

分配一個 XRSubImage 物件。左眼使用紋理的左側區域,右眼使用右側區域。

stereo-top-bottom

分配一個 XRSubImage 物件。左眼使用紋理的上側區域,右眼使用下側區域。預設值為 mono

lowerVerticalAngle 可選

一個數字,表示球體的較低垂直角度(以弧度為單位)。預設值為 -1.570795 (-π/2)。

mipLevels 可選

一個數字,指定所需的 mip 級別數量。預設值為 1

radius 可選

一個數字,表示球體的半徑。預設值為 0(無限球體)。

space 必需

一個 XRSpace 物件,定義了圖層與使用者物理環境的空間關係。

textureType 可選

一個字串,定義了圖層的紋理型別。可能的值:

texture

XRWebGLSubImage 的紋理型別為 gl.TEXTURE_2D

texture-array

XRWebGLSubImage 的紋理型別為 gl.TEXTURE_2D_ARRAY(僅限 WebGL 2 上下文)。預設值為 texture

transform 可選

一個 XRRigidTransform 物件,定義了相對於 space 的偏移和方向。

upperVerticalAngle 可選

一個數字,表示球體的較高垂直角度(以弧度為單位)。預設值為 1.570795 (π/2)。

viewPixelHeight 必需

一個數字,指定圖層檢視的畫素高度。

viewPixelWidth 必需

一個數字,指定圖層檢視的畫素寬度。

返回值

一個 XREquirectLayer 物件。

示例

建立 XREquirectLayer

使用上面列出的屬性配置等距柱狀圖層,並在呼叫 createEquirect() 時傳入。要將圖層呈現給 XR 裝置,請使用 XRSession.updateRenderState() 將它們新增到 layers 渲染狀態中。

js
function onXRSessionStarted(xrSession) {
  const glCanvas = document.createElement("canvas");
  const gl = glCanvas.getContext("webgl2", { xrCompatible: true });
  const xrGlBinding = new XRWebGLBinding(xrSession, gl);
  const equirectLayer = xrGlBinding.createEquirectLayer({
    space: xrReferenceSpace,
    viewPixelWidth: 1200,
    viewPixelHeight: 600,
    centralHorizontalAngle: 2 * Math.PI,
    upperVerticalAngle: Math.PI / 2.0,
    lowerVerticalAngle: -Math.PI / 2.0,
    radius: 0,
  });

  xrSession.updateRenderState({
    layers: [equirectLayer],
  });
}

規範

規範
WebXR Layers API Level 1
# dom-xrwebglbinding-createequirectlayer

瀏覽器相容性

另見