OpenGL 采样器的比较模式
来自 flyfish|已发表 2020-10-27
深度纹理可以通过两种模式进行采样, 第一种是按传统的纹理采样模式直接采样来获取深度值,这将会返回一个单浮点数vec4 类型的值。也可以使用比较模式(comparison mode) 模式来采样深度纹理。使用比较模式时,我们需要指定一个参考值(reference value) , 该参考值与从深度纹理中采样的深度值进行比较,为了使参考值与采样的深度值进行比较,我们还需要设置一个比较函数(comparison function),比较结果只有R值是比较结果。测试成功,返回 1.0f, 测试失败,返回0.0f.
当使用线性过滤器去采样时,采用结果是由硬件设备的实现来定义的,一般比较模式的返回值的范围是[0 , 1.0]之间, 这种采样方式称为百分比渐进采样方式“percentage Closer Filering”.
如果纹理是归一化的整型值,那么传入的参考值也将被归一化到[0,1]的范围内去匹配纹理值。否则参考值不会被归一化到[0,1]的区间.
使用比较模式需要专门做两方面的设置,首先GLSL中纹理的采样必须是阴影采样器,也就是这种模式专门针对的是阴影的采样,其次激活的深度纹理关联的采样器要开启比较模式。
要将纹理设置成比较模式,需要设置纹理比较模式GL_TEXTURE_COMPARE_MODE 设置成 GL_COMPARE_REF_TO_TEXTURE, 把纹理比较函数 GL_TEXTURE_COMPARE_FUNC 设置成 GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL , GL_NOT_EQUAL, GL_GEQUAL, GLGREATER 之一, 比较方式:
ref OPERATOR texture
如果设置比较函数为 GL_LESS, 当 参考值 ref 小于 采样的纹素值的情况下,测试通过时, 采样器将会返回非零的值——百分比渐进的采样方式[0,1] 或 0、1 值 。
OpenGL 采样器的比较模式相关推荐
- OpenGL Subdivision Modes细分模式的实例
OpenGL Subdivision Modes细分模式的实例 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <sb7.h> #&l ...
- OpenGL学习04_点画模式(点画线)
viod glLineStipple(GLint factor,GLshort pattern); OpenGL中设置直线的当前点画模式.pattern参数是由1或0组成的16位序列,它们根据需要进行 ...
- OpenGL概述(核心模式与立即模式、扩展、OpenGL中的对象)
1 关于OpenGL的理解 OpenGL本身不是一个API,而是一个规范. OpenGL是一个巨大的状态机(state machine),它是定义OpenGL现在该如何工作的变量的集合. OpenGL ...
- OpenGL:颜色索引模式的使用方式
在OpenGL中,颜色索引模式是不同于RGBA颜色模式的,在这个模式中,数据代表的是一个索引,要得到真正的颜色,还需要去查询索引表.表达式为: glutInitDisplayMode(GLUT_SIN ...
- OpenGL纹理映射与环绕模式
转载自 OpenGL超级宝典笔记--纹理映射 基础过滤 在纹理映射过程中,纹理元素与屏幕上的像素几乎不是一一对应的.一般情况下,在把纹理映射到几何图形的表面上时,我们需要对其进行拉伸或收缩. 根据一个 ...
- OpenGL中的着色模式GL_SMOOTH与GL_FLAT
glShadeModel void glShadeModel ( GLenum mode)是OpenGL1.0提供的接口.作用是设置着色模式. 参数mode可以是GL_SMOOTH(默认值)或GL_F ...
- OpenGL学习05_点画模式(点画多边形)
在默认情况下,填充多边形是用实心模式绘制的.此外,它们还可以使用一种32位×32位的窗口对齐的点画模式.glPolygonStipple()函数用于指定多边形的点画模式. void glPolygon ...
- OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...
- OpenGL Texture Wrap Modes纹理包裹模式的实例
OpenGL wrapmodes纹理包裹模式 先上图,再解答. 完整主要的源代码 源代码剖析 先上图,再解答. 完整主要的源代码 #include <sb7.h> #include < ...
最新文章
- 王者荣耀中一个英雄是怎么被产生的?
- 深度学习实现缺陷检测
- 如何设置iframe高度自适应,在跨域的情况下能做到吗?
- python接口服务两种方式(被调用、主动推送)
- Boost:bind的noexcept成员函数的type <>语法的测试程序
- 【英语学习】【WOTD】 logy 释义/词源/示例
- linux命令 选项,不点之Linux命令、选项及文件概念
- 人人商城小程序消息服务器配置,微擎系统人人商城小程序前端配置教程
- 农商行JAVA笔试题_银行笔试题
- useRoutes() may be used only in the context of a <Router> component.
- 2020秋招腾讯群面场景题:给莫高窟设计一款互联网+产品
- 云计算运维:运维人员常用到的11款服务器监控工具
- rails parameter permit
- 别再用知网下载文献了,这16个国内外好用的论文网站,赶紧收藏起来
- 41、Springboot 文件上传 采用Base64方式
- C语言小游戏-五子棋
- 华东师范大学 软件工程 2020年可信人工智能优秀大学生夏令营机试
- HDU 4915 Parenthese sequence DP
- 【QT】QT元对象系统
- java计算两个时间相差几个月
热门文章
- 志愿者(传智杯真题)
- 脑机接口科普0013——中枢神经与周围神经
- CCIE和HCIE工程师工资一般多少?
- 杰理之FCC 认证 PC 工具 FCCAssist_1.5.exe 介绍【篇】
- vslam论文5:OpenVSLAM: A Versatile Visual SLAM Framework
- 员工奖金需要交税吗_公司发放年终奖需要交税吗?年终奖如何缴纳个人所得税...
- Robot Framework(RF)语法与运用初识
- 用css固定textarea文本域大小尺寸
- 《python深度学习》笔记(十四):指数移动平均值EMA
- 关于CPU过热导致主机自行断电重启的解决办法