gpt4 book ai didi

Three.js 使用 WebRTC 并应用 Shader

转载 作者:行者123 更新时间:2023-12-02 18:54:53 24 4
gpt4 key购买 nike

我不知道如何将着色器应用到具有视频纹理的 Three.js 对象。

我一直在使用 webRTC 和 Three.js,并使用标准 Material 成功将视频纹理映射到网格上:

        var material    = new THREE.MeshBasicMaterial({
color : 0xffffff,
map : videoTexture
});

我想更进一步,为此纹理应用着色器(在本例中为索贝尔着色器)。我的尝试在这里:http://jsfiddle.net/xkpsE/1/

我收到了一堆 INVALID_OPERATION 警告,但无法理解如何调试该问题。我还没有看到其他人这样做,所以我认为公开这些知识将是有益的:)

如有任何帮助,我们将不胜感激。

最佳答案

你很接近。这是:http://jsfiddle.net/82fJh/1/ 。至少它可以在 OS X 上的 Chrome 下运行。

您遇到了一些着色器制服格式错误,并且您需要将 uv 作为变量传递。

var sobelShader = {
uniforms: {
'texture': {
type: 't',
value: videoTexture
},
'width': {
type: 'f',
value: 320.0
},
'height': {
type: 'f',
value: 240.0
}
},
vertexShader: [
'varying vec2 vUv;',
'void main() {',
'vUv = uv;',
'gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );',
'}'
].join('\n'),
fragmentShader: [
'uniform sampler2D texture;',
'uniform float width;',
'uniform float height;',
'varying vec2 vUv;',
'void main(void) {',
'float w = 1.0/width;',
'float h = 1.0/height;',
'vec2 texCoord = vUv;',
'vec4 n[9];',
'n[0] = texture2D(texture, texCoord + vec2( -w, -h));',
'n[1] = texture2D(texture, texCoord + vec2(0.0, -h));',
'n[2] = texture2D(texture, texCoord + vec2( w, -h));',
'n[3] = texture2D(texture, texCoord + vec2( -w, 0.0));',
'n[4] = texture2D(texture, texCoord);',
'n[5] = texture2D(texture, texCoord + vec2( w, 0.0));',
'n[6] = texture2D(texture, texCoord + vec2( -w, h));',
'n[7] = texture2D(texture, texCoord + vec2(0.0, h));',
'n[8] = texture2D(texture, texCoord + vec2( w, h));',
'vec4 sobel_horizEdge = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]);',
'vec4 sobel_vertEdge = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]);',
'vec3 sobel = sqrt((sobel_horizEdge.rgb * sobel_horizEdge.rgb) + (sobel_vertEdge.rgb * sobel_vertEdge.rgb));',
'gl_FragColor = vec4( sobel, 1.0 );',
'}'
].join('\n')
}

三.js r.53

关于Three.js 使用 WebRTC 并应用 Shader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14017491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com