Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl es OES_纹理_浮动扩展使用_Opengl Es_Textures_Webgl_Opengl Es 2.0_Webgl Extensions - Fatal编程技术网

Opengl es OES_纹理_浮动扩展使用

Opengl es OES_纹理_浮动扩展使用,opengl-es,textures,webgl,opengl-es-2.0,webgl-extensions,Opengl Es,Textures,Webgl,Opengl Es 2.0,Webgl Extensions,如何使用OES\u纹理\u浮动扩展? 我不明白是否有必要指定函数texImage2D的参数 var fb=gl.createFramebuffer(); gl.bindFramebuffer(gl.FRAMEBUFFER, fb); var rb=gl.createRenderbuffer(); gl.bindRenderbuffer(gl.RENDERBUFFER, rb); gl.renderbufferStorage(gl.RENDERBUFFER, gl.DEPTH_COMPONENT

如何使用OES\u纹理\u浮动扩展? 我不明白是否有必要指定函数texImage2D的参数

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,size[0],size[1]);
gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT,gl.RENDERBUFFER, rb);

var texture=gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
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, size[0], size[1],0, gl.RGBA, ???, ???);

gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D, texture, 0);

您需要编写什么来代替“?”

假设已启用扩展,则其
gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,size[0],size[1],0,gl.RGBA,gl.FLOAT,null)

然而,有一个很大的警告<代码>OES_纹理\u浮点
扩展不能保证您能够渲染到浮点纹理。这只是意味着你可以创建和读取浮点纹理。允许渲染为浮动的实际扩展是。但是如果浏览器支持这个扩展,他们就不会费心去显示它。所以你必须这么做

if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE){
    // cant render
}
检查将纹理附加到FBO后是否可以实际渲染为浮动纹理

来源:花了几个小时来弄清楚为什么IE支持
OES\u texture\u float
扩展,但它却不能在IE中工作


另外请注意,您不能使用浮点纹理的
gl.LINEAR
过滤,除非您还启用了截至2015年8月在大多数移动设备上不可用的
OES\u texture\u float\u LINEAR
扩展,假设您启用了该扩展,其
gl.texImage2D(gl.texture\u 2D,0,gl.RGBA,size[0],大小[1],0,gl.RGBA,gl.FLOAT,null)

然而,有一个很大的警告<代码>OES_纹理\u浮点
扩展不能保证您能够渲染到浮点纹理。这只是意味着你可以创建和读取浮点纹理。允许渲染为浮动的实际扩展是。但是如果浏览器支持这个扩展,他们就不会费心去显示它。所以你必须这么做

if (gl.checkFramebufferStatus(gl.FRAMEBUFFER) !== gl.FRAMEBUFFER_COMPLETE){
    // cant render
}
检查将纹理附加到FBO后是否可以实际渲染为浮动纹理

来源:花了几个小时来弄清楚为什么IE支持
OES\u texture\u float
扩展,但它却不能在IE中工作

另外请注意,您不能使用浮点纹理的
gl.LINEAR
过滤,除非您还启用了
OES\u texture\u float\u LINEAR
扩展,该扩展自2015年8月起在大多数移动设备上不可用