2015-05-22 1 views
0

В попытке привлечь модели в глубине текстуре Chrome выдает ошибку: WebGL: INVALID_FRAMEBUFFER_OPERATION: drawArrays: internalformat прикрепленного текстуры не цветной отображаемыйне рисует глубины текстуры в фреймбуфере

текстуры и фреймбуфера созданы так:

var fb=self.gl.createFramebuffer(); 
self.gl.bindFramebuffer(self.gl.FRAMEBUFFER, fb); 

var rb=self.gl.createRenderbuffer(); 
self.gl.bindRenderbuffer(self.gl.RENDERBUFFER, rb); 
self.gl.renderbufferStorage(self.gl.RENDERBUFFER, self.gl.DEPTH_COMPONENT16,256,256); 
self.gl.framebufferRenderbuffer(self.gl.FRAMEBUFFER, self.gl.DEPTH_ATTACHMENT,self.gl.RENDERBUFFER, rb); 

var texture_rtt=self.gl.createTexture(); 
self.gl.bindTexture(self.gl.TEXTURE_2D, texture_rtt); 
self.gl.texParameteri(self.gl.TEXTURE_2D, self.gl.TEXTURE_MAG_FILTER, self.gl.LINEAR); 
self.gl.texParameteri(self.gl.TEXTURE_2D, self.gl.TEXTURE_MIN_FILTER, self.gl.LINEAR); 
self.gl.texParameteri(self.gl.TEXTURE_2D, self.gl.TEXTURE_WRAP_S, self.gl.CLAMP_TO_EDGE); 
self.gl.texParameteri(self.gl.TEXTURE_2D, self.gl.TEXTURE_WRAP_T, self.gl.CLAMP_TO_EDGE); 
self.gl.texImage2D(self.gl.TEXTURE_2D, 0, self.gl.DEPTH_COMPONENT, 256, 256,0, self.gl.DEPTH_COMPONENT, self.gl.UNSIGNED_SHORT, null); 

self.gl.framebufferTexture2D(self.gl.FRAMEBUFFER, self.gl.COLOR_ATTACHMENT0,self.gl.TEXTURE_2D, texture_rtt, 0); 

self.gl.bindTexture(self.gl.TEXTURE_2D, null); 
self.gl.bindFramebuffer(self.gl.FRAMEBUFFER, null); 

пример можно найти: here

+0

, как starmole указывает, вы создаете 'DEPTH_COMPONENT' текстуру на 4-м от нижней линии, а затем пытается пристроить, что как' COLOR_ATTACHMENT0'. Измените 'gl.DEPTH_COMPONENT' на' gl.RGBA' и 'gl.UNSIGNED_SHORT' на' gl.UNSIGNED_BYTE', и он должен работать. – gman

ответ

3

Вы можете не прикреплять текстуру глубины как цвет:

framebufferTexture2D(self.gl.FRAMEBUFFER, self.gl.COLOR_ATTACHMENT0 

Неправильно. Вы можете прикрепить глубину к глубине. DEPTH_ATTACHMENT. Если вы хотите сделать глубину как цвет, вы должны сделать это в шейдере.

1

Взгляните на: http://learningwebgl.com/blog/?p=1786

var fb = gl.createFramebuffer(); 
gl.bindFramebuffer(gl.FRAMEBUFFER, fb); 

var rb = gl.createRenderbuffer(); 
gl.bindRenderbuffer(gl.RENDERBUFFER, rb); 
gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT16, 256, 256); 
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, rb); 

var rttTexture = gl.createTexture(); 
gl.bindTexture(gl.TEXTURE_2D, rttTexture); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); 
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); 
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 256, 256, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); 
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, rttTexture, 0); 

 Смежные вопросы

  • Нет связанных вопросов^_^