2016-12-15 37 views
2

我想做的事情不是https://www.mapbox.com/blog/mapbox-unity/,而是在XWalk視圖中使用three.js。是否可以從Blink公開WebGL上下文?

簡而言之,據我所知,mapbox插件是一個控制器,它可以訪問Mapbox視圖的OpenGL上下文和Unity視圖的OpenGL上下文。然後插件在Unity OpenGL上下文中渲染紋理貼圖。

在我的情況下,我不使用統一,但Three.js。我看到了通過將WebGL中的OpenGL上下文與另一個活動中的另一個OpenGL上下文共享的方法。這將需要:

  • 通過速滑運動員的肌肉眨眼和XWalk
  • 具有約束力的暴露從WebGL的OpenGL上下文使用XWalk Java擴展,從OpenGL上下文到另一個活動共享紋理緩存。

重要提示:

  • 旨在plaforms:的iOS,安卓,(作爲MapboxGL不支持Windows(使用D3D)保護將防止在D3D平臺上運行,例如Windows手機
  • mapboxGL-JS不是一個選項,因爲我需要離線地圖和其他本地唯一的功能。
+0

我懷疑有沒有辦法做到這一點。不過,mapbox提供了一個功能完備的webgl渲染器。它是開源的,可以修改成將紋理渲染到紋理/ FBO上。所以你可以在threejs或其他任何地方使用這個紋理。 – pleup

+0

好點,但我需要離線使用它,所以我不能使用JS版本。 – dagatsoin

回答

1

沒有辦法從WebGL獲取OpenGL上下文,因爲WebGL可能在其他API(即D3D)上工作。但是,要使用Three.js實現類似的功能,您可以使用mapbox-gl-js。只需將地圖渲染到屏幕外的畫布(不添加到DOM),並將其用作Three.js場景中飛機的紋理。

粗略地說,它可能看起來有點像這樣:

const map = new Map({ /* options */ }); 
const texture = new THREE.CanvasTexture(map.getCanvas(), /* ... */); 

map.on('render',() => { 
    requestAnimationFrame(render); 
    texture.needsUpdate = true; 
}); 

function render() { 
    myThreejsRenderer.render(mySceneWhichUsesTexture, camera); 
} 
+0

Thx爲您的答案,但地圖框gl-js不是一個選項。我需要離線地圖等原生功能。我編輯了關於它的問題。 (還有大約D3D) – dagatsoin

相關問題