Я пытаюсь реализовать отложенное средство просмотра веб-камеры в javascript, используя Three.js для возможностей WebGL.
Мне нужно хранить кадры, полученные с веб-камеры, чтобы их можно было показать через некоторое время (от нескольких миллисекунд до нескольких секунд). Я могу сделать это без Three.js, используя canvas
и getImageData()
. Вы можете найти пример на jsfidle.
Я пытаюсь найти способ сделать это без холста, но с использованием объекта Three.js Texture
или DataTexture
. Вот пример того, что я пытаюсь сделать. Проблема в том, что я не могу найти, как скопировать изображение из Texture
(image
имеет тип HTMLVideoElement
) в другое.
В функции rotateFrames()
старый кадр должен быть потерян, а новый должен заменить его, как в FIFO. Но линия
frames[i].image = frames[i + 1].image;
просто копирует ссылку, а не данные текстуры. Думаю, это должен сделать DataTexture
, но я не могу получить DataTexture
из Texture
или HTMLVideoElement
.
Есть идеи?
Внимание! у вас должна быть камера и разрешить браузеру использовать ее, чтобы примеры работали. И, очевидно, у вас должен быть обновленный браузер.