これはあなたが探しているものですか??
http://fiddle.jshell.net/m4Bh7/10/
編集:
function onFrame(dt) {
if (video.readyState === video.HAVE_ENOUGH_DATA) { /* new frame available from webcam */
context.drawImage(video, 0, 0,videoWidth,videoHeight);
frames[framesNum - 1].image.data = new Uint8Array(context.getImageData(0,0,videoWidth, videoHeight).data.buffer);
frames[framesNum - 1].needsUpdate = true;
}
}
これが最も重要な部分です。フレームのコピーを作成し、dataTexture にデータとして保存します。
function rotateFrames() {
for (var i = 0; i != framesNum - 1; ++i) {
/*
* FIXME: this does not work!
*/
frames[i].image.data = frames[i + 1].image.data;
frames[i].needsUpdate = true;
}
}
これにより、フレーム内のテクスチャからテクスチャにデータがコピーされます。
新しいバージョン:http://fiddle.jshell.net/hWL2E/4/
function onFrame(dt) {
if (video.readyState === video.HAVE_ENOUGH_DATA) { /* new frame available from webcam */
context.drawImage(video, 0, 0,videoWidth,videoHeight);
var frame = new THREE.DataTexture(new Uint8Array(context.getImageData(0,0,videoWidth, videoHeight).data.buffer) ,videoWidth,videoHeight);
frames[framesNum - 1] = frame;
frames[framesNum - 1].needsUpdate = true;
sprites[framesNum - 1].map = frames[framesNum - 1];
}
}
ビデオ画像のフレームごとに新しいテクスチャを生成します。
function rotateFrames() {
for (var i = 0; i != framesNum - 1; ++i) {
/*
* FIXME: this does not work!
*/
frames[i] = frames[i + 1];
sprites[i].map = frames[i];
}
}
これがそれをより良くするものです。使用されたテクスチャを再利用するため、GPU に再送信する必要はありません。