Opengl es 不';在帧缓冲区中绘制深度纹理

Opengl es 不';在帧缓冲区中绘制深度纹理,opengl-es,glsl,webgl,shadow,Opengl Es,Glsl,Webgl,Shadow,尝试在深度中绘制模型时,Chrome纹理出现错误: WebGL: 无效的\u帧缓冲区\u操作:DrawArray:附加纹理的内部格式不可颜色渲染 创建纹理和帧缓冲区是为了: var fb=self.gl.createFramebuffer(); self.gl.bindFramebuffer(self.gl.FRAMEBUFFER, fb); var rb=self.gl.createRenderbuffer(); self.gl.bindRenderbuffer(self.gl.RENDER

尝试在深度中绘制模型时,Chrome纹理出现错误: WebGL: 无效的\u帧缓冲区\u操作:DrawArray:附加纹理的内部格式不可颜色渲染

创建纹理和帧缓冲区是为了:

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);

可以找到以下示例:

不能将深度纹理附加为颜色:

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

这是错误的。只能将“深度”纹理附加到“深度”。深度与附件。如果要将深度渲染为颜色,则必须在着色器中执行此操作。

不能将深度纹理附加为颜色:

 framebufferTexture2D(self.gl.FRAMEBUFFER, self.gl.COLOR_ATTACHMENT0
这是错误的。只能将“深度”纹理附加到“深度”。深度与附件。如果要将深度渲染为颜色,则必须在着色器中执行此操作。

查看:

看看:


正如starmole所指出的,您正在从底线开始的第四个位置创建
DEPTH\u COMPONENT
纹理,然后尝试将其作为
COLOR\u ATTACHMENT0
附加。将
gl.DEPTH_组件
更改为
gl.RGBA
并将
gl.UNSIGNED_SHORT
更改为
gl.UNSIGNED_BYTE
,它应该可以工作。正如starmole指出的,您正在从底线开始的第4行创建
DEPTH_组件
纹理,然后尝试将其作为
颜色_ATTACHMENT0
附加。将
gl.DEPTH\u组件
更改为
gl.RGBA
并将
gl.UNSIGNED\u SHORT
更改为
gl.UNSIGNED\u BYTE
,它应该可以工作。