当前位置: 首页 > Web前端 > HTML5

WebGL2系列采样器对象

时间:2023-04-05 22:32:01 HTML5

前言在WebGL1中,纹理图像和采样信息都写在纹理对象中。采样信息告诉GPU如何读取纹理上的图像信息。如果我们想多次读取同一张图片的像素信息,但每次都使用不同的过滤方式,就需要创建两个不同的纹理对象。“你不烦吗?”WebGL:"..."采样器对象在WebGL2中,引入了采样器对象。使用采样器对象,可以在采样器对象上封装纹理过滤方法,而原来的纹理对象不需要指定过滤方法,所以一张图片只能创建一个纹理对象,也可以创建多个采样器针对不同的过滤方法;在使用纹理对象时,可以通过绑定纹理对象和采样器对象来实现指定图片来源和读取方式。纹理对象和采样方式分离,一个纹理对象可以关联多个采样器对象;多个纹理对象也可以与一个采样器相关联。如果使用采样器对象,某些WebGL引擎需要更改代码。创建采样器对象可以通过gl.createSampler方法创建采样器对象,例如:varsamplerA=gl.createSampler();gl.createSampler方法下面是gl.createSampler的签名WebGLSamplergl.createSampler();此方法没有参数并返回一个创建的采样器对象。指定采样器的参数采样器的参数可以通过方法gl.samplerParameteri来指定。gl.samplerParameteri方法是gl.samplerParameteri的签名voidgl.samplerParameteri(sampler,pname,param);voidgl.samplerParameterf(sampler,pname,param);第一个参数是采样器对象,第一个参数需要指定参数名,第三个参数是参数值,其中参数名如下这些参数包括gl.TEXTURE_MIN_FILTERgl.TEXTURE_MAG_FILTERgl.TEXTURE_WRAP_Sgl.TEXTURE_WRAP_Tgl.TEXTURE_COMPARE_MODEgl。TEXTURE_COMPARE_FUNC可以看出原来WebGL1中需要指定的纹理对象上的参数,只是现在移到了sampler对象上。绑定采样器到纹理单元通过函数gl.bindSampler(unit,sampler),可以将采样器绑定到指定的纹理单元,函数签名:voidgl.bindSampler(unit,sampler);例如,下面的代码片段:gl。activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,texture);gl.bindSampler(0,samplerA);这时候就相当于把texture对象和samplerA对象绑定在一起了。此时,纹理单元0的读取,数据源来自于纹理对象,过滤方式来自于原来的samplerA。删除采样器对象通过gl.deleteSampler方法可以删除指定的采样器对象。函数签名如下:voidgl.deleteSampler(sampler);参数指定要删除的sampler对象,如代码:gl.deleteSampler(sampler);示例代码片段下面是一个使用采样器的示例代码片段;gl.samplerParameteri(samplerA,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);gl.samplerParameteri(samplerA,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);varsamplerB=gl.createSampler();gl.samplerParameteri(samplerB,gl_MIN_TEXTgl.LINEAR_MIPMAP_LINEAR);gl.samplerParameteri(samplerB,gl.TEXTURE_MAG_FILTER,gl.LINEAR);gl.samplerParameteri(samplerB,gl.TEXTURE_WRAP_S,gl.MIRRORED_REPEAT);gl.samplerParameteri(samplerB,gl.TEXTURE_MAG_FILTER,_gl.WRAP_//...gl.activeTexture(gl.TEXTURE0);gl.bindTexture(gl.TEXTURE_2D,纹理);gl.bindSampler(0,samplerA);gl.activeTexture(gl.TEXTURE1);gl.bindTexture(gl.TEXTURE_2D,纹理);gl.bindSampler(1,采样器B);欢迎关注公众号“ITman彪叔”彪叔,拥有10多年开发经验,现任公司系统架构师、技术总监、技术培训师、职业规划师。对计算机图形学、WebGL、前端可视化有深入研究。对程序员思维能力的训练与训练,程序员职业生涯规划有着浓厚的兴趣。欢迎关注公众号“IT人飚大叔”。飚叔,10多年开发经验,现任公司系统架构师、技术总监、技术培训师、职业规划师。熟悉Java、JavaScript、Python语言,熟悉数据库。熟悉java、nodejs应用系统架构,大数据高并发、高可用、分布式架构。对计算机图形学、WebGL、前端可视化有深入研究。对程序员思维能力的训练与训练,程序员职业生涯规划有着浓厚的兴趣。