Image processing 在WebGL/Javascript中,有没有一种快速的方法可以从几个帧缓冲区获得平均颜色?
我对WebGL这门学科很陌生。 我想做的是计算6个不同帧缓冲区的平均颜色,如下图所示。现在我想知道最好的办法是什么? 我试着去做Image processing 在WebGL/Javascript中,有没有一种快速的方法可以从几个帧缓冲区获得平均颜色?,image-processing,colors,webgl,average,framebuffer,Image Processing,Colors,Webgl,Average,Framebuffer,我对WebGL这门学科很陌生。 我想做的是计算6个不同帧缓冲区的平均颜色,如下图所示。现在我想知道最好的办法是什么? 我试着去做 gl.readPixels(0, 0, 256, 256, gl.RGBA, gl.UNSIGNED_BYTE, pixelValues); 但这似乎很慢。。。 有没有一种方法可以在图形卡上实现这一点 this is how the FBO is set up - I have this from a tutorial: ... 你有两个选择 编写一个片段着色
gl.readPixels(0, 0, 256, 256, gl.RGBA, gl.UNSIGNED_BYTE, pixelValues);
但这似乎很慢。。。
有没有一种方法可以在图形卡上实现这一点
this is how the FBO is set up - I have this from a tutorial:
...
你有两个选择
太好了,非常感谢。我将对此进行研究。你能举个例子说明如何从FBO获取最小的mipmap吗?你可以简单地调用glGetTexImage(GL_TEXTURE_2D,pixelValues)()这个问题是关于WebGL的。WebGL中没有glGetTexImage或glGetTexLevelParameter。啊,我的错-我想的是OpenGL而不是构建WebGL的OpenGL ES。您可以做的一个更改是不使用6个FBO-您可以在不同的纹理单位上设置6个纹理,并首先平均每个像素,然后对FBO进行1x1像素四元渲染。那样的话,你只需要两个FBO。
precision mediump float;
uniform sampler2D u_textures[6];
uniform float u_bias;
void main() {
// since we know we are rendering only with the last mip
// then there is only 1 texel.
vec2 center = vec2(0.5, 0.5);
vec4 sum =
texture2D(u_textures[0], center, u_bias) +
texture2D(u_textures[1], center, u_bias) +
texture2D(u_textures[2], center, u_bias) +
texture2D(u_textures[3], center, u_bias) +
texture2D(u_textures[4], center, u_bias) +
texture2D(u_textures[5], center, u_bias);
gl_FragColor = sum / 6.0;
}