我試圖在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.