octaveos | Terminapor a écrit :
ça vient probablement du depth buffer que tu as mal enregistré dans ton framebuffer, fais voir ton code
|
^^ en effet, à part la manipulation des matrices, les notions de buffering m’échappent.
en gros j'ai fais une petite fonction me permettant de stocker dans un tableau mes textures générées.
Code :
- function createFBO(width,height,type,textureSize){
- var buffer = {};
- buffer.framebuffer = type=="screen"? null:gl.createFramebuffer();
- buffer.height = parseInt(height);
- buffer.width = parseInt(width);
- buffer.textureSize = textureSize
- if(buffer.framebuffer){
- initTextureFramebuffer(buffer)
- buffer.storeToMap = function(){
- gl.bindTexture(gl.TEXTURE_2D, this.map);
- gl.generateMipmap(gl.TEXTURE_2D);
- gl.bindTexture(gl.TEXTURE_2D, null);
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
- }
- }
- return buffer;
- }
- function initTextureFramebuffer(buffer) {
- gl.bindFramebuffer(gl.FRAMEBUFFER, buffer.framebuffer);
- var s = buffer.textureSize?buffer.textureSize:buffer.width;
- buffer.map = gl.createTexture();
- gl.bindTexture(gl.TEXTURE_2D, buffer.map);
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, s, s, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
- gl.generateMipmap(gl.TEXTURE_2D);
- var renderbuffer = gl.createRenderbuffer();
- gl.bindRenderbuffer(gl.RENDERBUFFER, renderbuffer);
- gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, s, s);
- gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, buffer.map, 0);
- gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, renderbuffer);
- gl.bindTexture(gl.TEXTURE_2D, null);
- gl.bindRenderbuffer(gl.RENDERBUFFER, null);
- gl.bindFramebuffer(gl.FRAMEBUFFER, null);
- }
|
|