"снимок" сцены 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 из вашей сцены; Может быть, это может помочь вам.

Другие вопросы по тегам