2016-12-15 16 views
2

Я хотел был бы сделать то же самое, чем https://www.mapbox.com/blog/mapbox-unity/, но с three.js в представлении XWalk.Возможно ли открыть контекст WebGL из Blink?

Вкратце, как я понимаю, плагин mapbox является контроллером, который имеет доступ к контексту OpenGL вида Mapbox и контексту OpenGL в представлении Unity. Затем плагин выполняет рендеринг текстуры карты в контексте Unity OpenGL.

В моем случае я не использую Unity, а Three.js. Я вижу способ сделать это, разделив контекст OpenGL с WebGL на другой контекст OpenGL из другого действия. Он должен был бы:

  • разоблачить контекст OpenGL из WebGL с помощью привязки betwwen Blink и XWalk
  • использовать расширение XWalk Java, чтобы разделить текстуры буфер из контекста OpenGL в другой деятельности.

Важные примечания:

  • направленные plaforms:. IOS, Android, (Как MapboxGL не поддерживает ОС Windows (с использованием D3D) охранник помешают работает на D3D платформы, такие как Windows Phone)
  • mapboxGL-JS не является вариантом, поскольку мне нужна автономная карта и другие родные функции.
+0

Я сомневаюсь, есть ли способ сделать это. Однако mapbox предоставляет хорошо показанный рендеринг webgl. Это с открытым исходным кодом, и его можно модифицировать, чтобы отображать карты на текстуре/FBO. Таким образом, вы можете использовать эту текстуру в трех или любом другом. – pleup

+0

Хороший вопрос, но мне нужно использовать его в автономном режиме, поэтому я не могу использовать версию JS. – dagatsoin

ответ

1

Невозможно получить контекст OpenGL из WebGL просто потому, что 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 для вашего ответа, но mapbox gl-js не является вариантом. Мне нужна встроенная функция, например, автономные карты. Я отредактировал мой вопрос об этом. (и около D3D тоже) – dagatsoin