2016-01-18 4 views
1

Хорошо, я знаю, что canvas.toDataUrl() создаст изображение в формате png. Однако, когда я пытаюсь получить изображение с http://threejs.org/examples/#webgl_lines_sphere. Все, что я вижу, это черное изображение на хроме. Для повторения шагов -trjs canvas todataurl is blank

1) Откройте консоль разработчика и выберите элемент холста. 2) canvas = $0 3) context = canvas.getContext('webgl', {preserveDrawingBuffer: true}) 4) img = canvas.toDataUrl() 5) document.write('<img src="'+img+'"/>')

изображение является пустым. Однако, я попробовал с другим холстом по ссылке http://threejs.org/examples/#canvas_geometry_cube. Проделайте следующие шаги для репликации.

1) Откройте консоль разработчика и выберите элемент холста. 2) canvas = $0 3) context = canvas.getContext('2d', {preserveDrawingBuffer: true}) 4) img = canvas.toDataUrl() 5) document.write('<img src="'+img+'"/>')

Это дало ожидаемый результат. Почему существует разница и как этого можно избежать, чтобы получить первое изображение?

ответ

0

Это потому, что в первом примере (см линейных источников 103) действительно использует THREE.WebGLRenderer создателя, в то время как второй (см линейных источников 92) использует THREE.CanvasRenderer.

Некоторые примечания:

+0

Есть ли работа, чтобы захватить изображение после визуализации всего документа, а не во время цикла рендеринга? Предположим, что я не могу и не смог бы обработать цикл рендеринга. –

+0

Если у вас есть доступ к переменной renderer, вы можете вызвать 'renderer.domElement.toDataURL()', см. Мое редактирование. – Kaiido

+0

Кажется, что renderer.domElement.toDataURL() также не работает. Это сработало для вас, Кайидо? Кроме того, нет никакой разницы в доступе к renderer.domElement и $ 0 в консоли, так как он просто возвращает холст в любом случае. –