我试图在WebGL中实现拾取。我有很多物品(大约500),我希望每个人都被允许被选中。为了做到这一点,我做了一个环,其独特的颜色分配给每个对象(参见采摘原理):WebGL:使用帧缓冲区来拾取多个对象
for (var i = 0, len = objects.length; i < len; i++) {
framecolors[count++] = i % 256/256; //Red
framecolors[count++] = Math.floor(i/256)/256; //Green
framecolors[count++] = Math.floor(i/(256*256))/256; //Blue
}
framecolors
然后在古典缓冲用来检查每一个对象是否具有不同色调红。有效。
现在,我想使用我的对象的原始颜色,并在背景中使用红色阴影的帧缓冲区。我已经通过了一些代码,并且我有点困惑。
这是我到目前为止尝试过的。所谓
//Creates texture
colorTexture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, colorTexture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 400, 400, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
//Creates framebuffer
fb = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, colorTexture, 0);
gl.bindTexture(gl.TEXTURE_2D, colorTexture);
gl.enable(gl.DEPTH_TEST);
gl.bindFramebuffer(gl.FRAMEBUFFER, fb);
gl.clear(gl.DEPTH_BUFFER_BIT);
gl.drawArrays(gl.POINTS, 0, vertexPositionBuffer.numItems);
功能后:
功能采摘之前调用
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
gl.bindTexture(gl.TEXTURE_2D, colorTexture);
gl.drawArrays(gl.POINTS, 0, vertexPositionBuffer.numItems);
正如你可能会明白,我不是很舒服的帧缓冲区,我真的不明白他们怎么工作,即使我读了很多关于他们。我不知道如何将framecolors
链接到帧缓冲区。有没有办法?
谢谢, R.