【发布时间】:2017-06-07 19:33:10
【问题描述】:
我有一个带有 VideoTexture 的 MeshBasicMaterial。我可以动态地将自定义着色器应用于材质吗?我可以使用 THREE.EffectComposer 将着色器应用到整个场景,但是如果我想将自定义过滤器应用到场景中的特定元素怎么办。我想测试简单的过滤器,如棕褐色、色相饱和度。此外,我必须能够在两者之间切换而无需重新加载项目。
我没有使用像 Serious.js 或 glfx.js 这样的 js 库,因为当我使用没有 canvas/img/video 作为地图的三个.js 对象时,它可能会在后期导致问题。
videoTexture = new THREE.VideoTexture(video);
videoTexture.minFilter = THREE.LinearFilter;
videoTexture.magFilter = THREE.LinearFilter;
material = new THREE.MeshBasicMaterial({
map: videoTexture,
side: THREE.DoubleSide,
transparent: true,
depthTest: false,
depthWrite: false
});
composer = new THREE.EffectComposer( renderer );
composer.addPass( new THREE.RenderPass( scene, camera ) );
var effect = new THREE.ShaderPass( THREE.SepiaShader );
effect.renderToScreen = true;
composer.addPass( effect );
composer.render();
编辑 1:过滤器 css(https://developer.mozilla.org/en-US/docs/Web/CSS/filter) 也不起作用,因为它只会改变视觉媒体,因此虽然它可以操纵最终画布,但它不能操纵内部对象纹理。
【问题讨论】:
标签: javascript three.js shader