Поскольку toDataURL является способом холста элемента HTML, который будет работать для 3d контекста тоже. Но вам нужно позаботиться о двух вещах.
Убедитесь, когда 3D контекст инициализируется вы установите preserveDrawingBuffer
флаг так, как так:
var context = canvas.getContext("experimental-webgl", {preserveDrawingBuffer: true});
Затем пользователь canvas.toDataURL()
получить изображение
В threejs вы должен был бы выполняться после создания экземпляра визуализации:
new THREE.WebGLRenderer({
preserveDrawingBuffer: true
});
Также имейте в виду, что это может иметь последствия для производительности. (Прочитано: https://github.com/mrdoob/three.js/pull/421#issuecomment-1792008)
Это только для WebGL визуализатора, в случае threejs canvasRenderer, хотя, вы можете просто сделать renderer.domElement.toDataURL();
непосредственно, ни один из параметров инициализации не требуется.
Мой эксперимент webgl: http://jsfiddle.net/TxcTr/3/ press 'p' на скриншот.
Подходит к gaitat, я только что перешел по ссылке в его комментарии, чтобы получить ответ.
Я не уверен, что вы можете. 2D-холст поддерживает это, но я полагаю, что холст WebGL этого не делает. –
Взгляните на https://github.com/jeromeetienne/threejsboilerplate/blob/master/vendor/threex/THREEx.screenshot.js – gaitat