高级纹理查询函数
来源:互联网 发布:java string转time 编辑:程序博客网 时间:2024/06/06 02:24
sampler ——-> texture
samplerBuffer —–>textelFetch
对于具有细节层次贴图的纹理 textureLod(gsmapler* tex, vec, float lod);//lod 为细节层次,显示控制细节层次。
计算mipmap级别:
minMap:滤波后的图像存储为完整的低分辨率版本。
细节层级由像素和纹理中的纹素的比值决定的。
使用mipMap时候,opengl根据被映射对象的大小,自动决定使用纹理图的哪个分辨率层级。如果不使用mipMap,那么映射到更小图像上的纹理将随着物体的移动发生闪烁现象。
如果不想使用mipmap到1x1的纹理的所有变化,可以将GL_TEXTURE_MAX_LEVEL值设置为提供的最大级数。
更小的纹理的纹素是更高分辨率的纹理对应的4个纹素的加权的平均。
线性滤波是用坐标来从离散采样信号选择临近样本的技术。
genmipMap(){ glGenTextures(1, &_mipmapTex); glBindTexture(GL_TEXTURE_2D, _mipmapTex); glTexStorage2D(GL_TEXTURE_2D, 7, GL_RGBA8, 64, 64); //生成具有64*64 7细节层次纹理 每个细节层次具有不同的颜色 unsigned int colors[] = { 0xFF0000FF, 0xFF00FF00, 0xFFFF0000, 0xFF00FFFF, 0xFFFF00FF, 0xFFFFFF00, 0xFFFFFFFF }; int i, j; unsigned int * data = new unsigned int[64 * 64]; for (i = 0; i < 7; i++) { for (j = 0; j < 64 * 64; j++) { data[j] = colors[i]; } int nm = 64 >> i; glTexSubImage2D(GL_TEXTURE_2D, i, 0, 0, 64 >> i, 64 >> i, GL_RGBA, GL_UNSIGNED_BYTE, data); } glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, 4.5f); // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); delete[] data;}
颜色 红色 白色
Lod级数 0 1 2 3 4 5 6
分辨率 64 32 16 8 4 2 1
GL_TEXTURE_MAG_FILTER 程序默认的最大级数为0级,采样这个参数表明计算的mipmap的lod层级小于等于0级。 GL_NEAREST 表示禁止使用滤波,采用最临近像素值。GL_LINEAR 表示采用线性滤波技术。
纹理缩小也就是mipmap生效的地方。
随着对象离视点的距离变远,对象的大小(屏幕像素大小)变小,纹理被压缩。迫使最小滤波模式采用更高的lod层级。
GL_TEXTURE_MIN_FILTER 控制在mipmap级数大于0时候如何重建纹素。选择GL_NEAREST GL_LINEAR 将禁用Mipmap,使用Lod = 0 的纹理.
GL_NEAREST 效果
GL_NEAREST_MIPMAP_NEAREST {A}MIPMAP{B}
A表示每个细节层级纹理的滤波控制,B表示细节层级间的纹理滤波模式。
GL_NEAREST_MIPMAP_LINEAR
GL_NEAREST_MIPMAP_NEAREST
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1);
设置起作用的最大级数:这里级数为1,那么只能显示0 到1 级的纹理,也就是两种颜色。
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_LOD_BIAS, 0.5f);
glGenerateMipmap 提供自动生成细节层次图,在质量和性能之间更多考虑性能方面。
比例因子
默认缩小滤波器启用mipmap。
直接使用最小层级纹理颜色:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 6);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_BASE_LEVEL, 6);
shader 中等价于:
outcolor0 = textureLod(mipmapTex,vs_fs_texCoord,6.0f);
显示梯度设置:
textureGrad(tex,p,dpx,dpy);
dTdx和dTdy的值是表示窗口的X和Y坐标的每个像素的每个纹理坐标的变化的向量。
Gradient texture access
Being able to bias the mipmap LOD or specify the specific mipmap to use is useful, but it is also useful to change the mipmap lod computation in more subtle ways. This function allows you to specify the two gradients for how the texture coordinates change locally:
gvec textureGrad(gsampler sampler, vec texCoord, gradvec dTdx, gradvec dTdy);
The type of gradvec is a float-vector with a number of components equal to the dimensionality of the sampler type. A 1D sampler uses a “float”, etc. Note that shadow sampler types do not add an additional coordinate to gradvec, so a sampler2DShadow is still “vec2”.
This function works for sampler types that are not multisample, buffer texture, or cubemap array samplers, including those that do not have mipmaps (like sampler2DRect).
The values of dTdx and dTdy are vectors that represent the change of each texture coordinate per pixel of the window’s X and Y coordinates.
This function does not require implicit derivatives, since it provides them.
更多关于纹理映射相关参考:
https://t.xiaomiquan.com/QRjA2Fq
- 高级纹理查询函数
- SQL高级查询--translate函数
- SQL高级查询--decode()函数
- 高级纹理技术
- 高级纹理映射
- OpenGL--高级纹理知识
- SQL Server T-SQL高级查询、函数
- hive 高级查询常用函数关键字总结
- 有用的SQL高级函数与查询
- 高级纹理映射知识汇总
- Shader实例:高级纹理应用
- Oracle 高级查询sql DECODE函数 分组函数
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- 高级查询
- SpringBoot定时任务(@Scheduled)说明
- 主成分分析(PCA)
- Cordova打包Vue项目
- POJ3126-Prime Path
- seo人不仅仅需要懂技术还需要懂产品与运营
- 高级纹理查询函数
- 关于使用js设置值的问题
- JS获取当前完整的url地址以及参数的方法
- 音视频同步(播放)原理
- 基于.NET平台常用的框架整理
- mysql中的文件路径书写
- 将windows socket 初始化接口封装成一个类,方便好用
- 阿里NIPS 2017论文解读:如何降低TensorFlow训练的显存消耗?
- [知了堂学习笔记]_JQuery入门