"снимок" сцены babylonjs иногда срабатывает, иногда нет
Я пытаюсь сделать "снимок" сцены babylon3d... другими словами: я пытаюсь клонировать холст babylon3d, когда пользователь нажимает кнопку, а затем добавлять новую <canvas>
к <body>
.. Иногда это работает, а иногда нет.
Однако, если я использую простой холст (то есть с помощью fillRect), клонирование / добавление всегда работает как положено.
Я настроил тест на plunker, чтобы продемонстрировать свою проблему: plunker: нажимайте кнопку снова и снова, чтобы увидеть, как спорадически она ведет себя, когда есть сцена вавилона. И ПРИМЕЧАНИЕ: Вы можете переключаться между простым холстом и холстом вавилона из обработчика _jquery(document).ready(...).
thanks, Shannon
1 ответ
Это потому, что в версии 2.3.0 Babylonjs:
Движок теперь инициализирует WebGL с preserveDrawingBuffer = false по умолчанию.
Вам нужно инициализировать двигатель, передав {preserveDrawingBuffer: true}
объект в качестве третьего параметра.
Но это, к сожалению, убьет выступления вашего холста.
Я не специалист в Вавилоне, и я не нашел способа позвонить scene.render
метод, в котором мы могли бы использовать метод флага, предложенный @CapsE. Но есть BABYLON.Tools.CreateScreenshot(engine, camera, size)
метод, который сделает загружаемый png из вашей сцены; Может быть, это может помочь вам.