three.js:捕获视频帧供以后使用

时间:2016-10-30 14:57:20

标签: javascript three.js

我正在使用three.js r73。我有一个片段着色器,用这样的行显示视频帧:

    gl_FragColor = texture2D( iChannel0,  uv);

我想要另一个制服(比如说iChannel1)来包含在某个早期点显示的视频帧。 (然后我会在iChannel0和iChannel1之间做一些掩码来进行动作捕捉/边缘检测等)。

我尝试了各种方法,但没有运气。

我认为我需要在javascript中以某种方式克隆视频纹理,然后将其分配给iChannel1,但我不知道如何捕获帧。

我想我可以捕获画布内容,但画布上可能还有其他我不想要的噪音。我真的希望视频帧不是画布。通过画布捕获也似乎非常迂回。我觉得我只是缺少一些API调用来捕获当前视频帧,我可以制作iChannel1将使用的纹理。

我看过UniformsUtils,但这似乎也无法解决问题。

1 个答案:

答案 0 :(得分:0)

我在发布问题后不久就找到了一种方法。 D'哦。

这是方法,供将来参考:

if (timeToCaptureFrame) {
    that.uniforms.iChannel1.value.image = that.uniforms.iChannel0.value.image;
    that.uniforms.iChannel1.value.needsUpdate = true;
}

请注意,需要正确初始化iChannel1才能使其正常工作。这样的事情有效:

var pathToSubtractionTexture = 'aStillImage.jpg';
(new THREE.TextureLoader()).load(pathToSubtractionTexture, function ( texture ) {
    that.uniforms.iChannel1.value = texture;
});