【openGL4.x手册14】OpenGL 渲染管道的逻辑运算

目录

  • 一、说明
  • 二、逻辑运算
  • 三、行动
  • 四、写入掩码
    • 6.1 颜色掩码
    • 6.2 深度mask
    • 6.3 模板mask

一、说明

   对于渲染管道的混合方案,需要以种种不同混合方案,其中混合的方式用逻辑运算实现。其次,在混合颜色的时候,还有掩码过滤器,本文将介绍这些颜色混合操作。

二、逻辑运算

   OpenGL 渲染管道

   逻辑操作是在片段的颜色值和帧缓冲区中与该特定片段颜色相对应的颜色值之间应用的每样本处理操作。逻辑运算是对表示颜色的位模式执行的布尔运算。

   若要激活逻辑操作,必须启用GL_COLOR_LOGIC_OP。每当启用逻辑操作时,都会禁用所有混合操作。

   由于逻辑运算是按位布尔运算,因此有时此类运算是不合适的。这些属性由附加到与该片段颜色相对应的帧缓冲区的图像属性定义。启用逻辑操作后,仅当满足以下所有条件时,才会对特定颜色缓冲区执行逻辑操作:

   帧缓冲图像使用整数图像格式(规范化或非规范化)。
   sRGB 渲染处于禁用状态,或者如果启用,帧缓冲图像的图像格式不在 sRGB 色彩空间中。
   如果这些条件中的任何一个失败,则该特定颜色缓冲区将不会对其执行逻辑操作。渲染操作中的其他缓冲区可能仍通过这些测试,并且将对它们执行逻辑操作。

三、行动

   有许多不同的逻辑操作可用。请注意,与 Blending 不同,OpenGL 逻辑操作不能对不同的片段颜色执行单独的操作。所有片段颜色(不能使用逻辑运算的片段颜色除外,如上所述)都将使用相同的操作。

   要使用的特定操作由以下函数设置:

   void glLogicOp(GLenum 操作码);
   操作码定义要使用的操作(默认值为 GL_COPY。下表列出了可用的逻辑运算及其结果。逻辑运算是按组件单独执行的。

   片段颜色的分量值称为 S;帧缓冲图像中的分量值称为 D。“&”是按位,“|”是按位,或者,“^”是按位 xor,~ 是按位否定。

操作码生成的操作
GL_CLEAR0
GL_SET1
GL_COPYS
GL_COPY_INVERTED~S
GL_NOOPD
GL_INVERT~D
GL_ANDS&D公司
GL_NAND~(S&D )
GL_ORS
GL_NOR~(S |D)
GL_XORS ^ D
GL_EQUIV~(S ^ D)
GL_AND_REVERSES & ~D
GL_AND_INVERTED~S&D
GL_OR_REVERSES|~D
GL_OR_INVERTED~S |D

四、写入掩码

   写入掩码是渲染管线的一部分,用于允许或阻止将颜色、深度或模具组件写入当前帧缓冲区。

   片段可以包含多个颜色值、深度值和模具值。除模具外,所有模具都可以由片段着色器生成。经过各种测试操作后,可以将片段的值写入当前帧缓冲区中的样本。写入屏蔽状态可以防止写入数据的某些组件。

   掩码状态会影响修改当前帧缓冲区的以下操作:

   所有绘图命令。
   帧缓冲清除调用 glClear 和 glClearBuffer。
   注意:这不适用于影响恰好是当前帧缓冲区一部分的图像的操作。例如,如果使用图像加载存储来修改图像的数据,则写入掩码不会影响该写入,即使该图像也是当前帧缓冲对象的一部分(当然,尝试以两种方式写入同一图像也会产生未定义的行为)。写入掩码仅适用于通过当前帧缓冲区的写入操作。
   尽管掩码仅适用于对帧缓冲区的写入,但掩码状态不是帧缓冲状态。因此,它不是 Framebuffer 对象或默认 Framebuffer 的一部分。绑定新的帧缓冲区不会影响掩码。

6.1 颜色掩码

   片段着色器输出的颜色可以被遮罩。每个单独的颜色组件(R、G、B 和 A)都有一个单独的蒙版。因此,可以防止写入某些颜色组件。

   由 glDrawBuffers 函数定义的每个单独的颜色缓冲区都有一个单独的掩码。

   若要为特定绘制缓冲区设置掩码,请使用 glColorMaski 函数:

void glColorMaski(GLuint buf, GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);

   buf 参数指定要为其设置蒙版的颜色缓冲区。这可以是 [0, GL_MAX_DRAW_BUFFERS) 范围内的任何值。其他值设置为 GL_TRUE 以启用写入该组件,GL_FALSE设置为禁用写入该组件。

   函数 glColorMask 可用于设置所有绘制缓冲区的掩码。这对于在所有输出缓冲区上快速重新启用写入掩码非常有用。

6.2 深度mask

   深度缓冲区写入可以屏蔽,从而防止深度缓冲区更新。这对于实现透明度很有用。遮罩由以下函数控制:

 void glDepthMask(GLboolean flag​);

   将 flag 设置为 GL_TRUE 表示写入深度。

6.3 模板mask

   模板写入遮罩的工作方式略有不同,有两种方式。首先,Stencil Buffer 始终是一个无符号整数(具有一定的位深度),因此此处的掩码是一个实际的位域,而不是简单的开/关。

   另一个区别是三角形的两条边的模板测试可能不同。因此,可以为任一侧设置模板写入掩码,也可以同时为两侧设置模板。

   要设置模具位掩码,请使用以下函数:

void glStencilMaskSeparate(GLenum face, GLuint mask);

   面确定要设置的模具位掩码面。可以GL_FRONT、GL_BACK或GL_FRONT_AND_BACK同时设置两边的位掩码。在掩码中设置的位是唯一会受到任何后续渲染命令影响的模具位。

   glStencilMask 函数可用作GL_FRONT_AND_BACK的简写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/802002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云新手用户建站必看攻略,从注册域名到网站上线需完成步骤

无论是个人还是企业新手用户,搭建个人或者企业网站都必须进过注册域名、购买云服务器、搭建网站、ICP备案、解析域名等步骤,本文为大家展示阿里云新手用户建站过程中从注册域名到网站上线需要完成的具体步骤。 1、选购域名 域名是互联网世界的门牌号码&…

什么是HW,企业如何进行HW保障?

文章目录 一、什么是HW二、HW行动具体采取了哪些攻防演练措施三、攻击方一般的攻击流程和方法四、企业HW保障方案1.建意识2.摸家底3.固城池4.配神器5.增值守 一、什么是HW 网络安全形势近年出现新变化,网络安全态势变得越来越复杂,黑客攻击入侵、勒索病…

【JavaWeb】Day37.MySQL概述——数据库设计-DML

数据库操作-DML DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。 1.增加(insert) insert语法: 向指定字段添加数据 insert into 表名 (字段名1, 字段名2) values (值1, 值2); 全部字段添加数据…

回归预测 | MATLAB实现BO-GRNN贝叶斯优化广义回归神经网络多输入单输出预测

回归预测 | MATLAB实现BO-GRNN贝叶斯优化广义回归神经网络多输入单输出预测 目录 回归预测 | MATLAB实现BO-GRNN贝叶斯优化广义回归神经网络多输入单输出预测预测效果基本介绍程序设计参考资料预测效果 基本介绍

如何实现小程序滑动删除组件+全选批量删除组件

如何实现小程序滑动删除组件全选批量删除组件 一、简介 如何实现小程序滑动删除组件全选批量删除组件 采用 uni-app 实现,可以适用微信小程序、其他各种小程序以及 APP、Web等多个平台 具体实现步骤如下: 下载开发者工具 HbuilderX进入 【Dcloud 插…

使用Datax自定义采集组件Reader/Writer实现国产数据库支持以及_Datax数据清洗/过滤规则功能自定义---大数据之DataX工作笔记007

我们基于datax来做的自己的数据采集系统,现在基本的数据采集已经实现了,也就是调用datax的数据采集能力,实现在已支持的数据库之间同步数据.我们是基于datax-web实现的,里面都有开源的代码了,可以分析以后拿过来用,这个过程并不复杂,而且,结合xxljob的web那个开源项目,也可以让…

gateway基于redis做限流处理

文章目录 前言一、如何限流?二、使用步骤总结 前言 限流的意义 限流是针对于并发量比较高的时候,如果不针对对应的服务做限流操作,可能造成服务器压力过大,宕机等情况. 一、如何限流? 限流的方式: 计数…

Kafka消费者在Java中的应用

加油,新时代打工人! Kafka生产者在Java中的应用 创建Kafka消费者配置 Properties props new Properties(); props.setProperty("bootstrap.servers", "node1.itcast.cn:9092"); props.setProperty("group.id", "t…

Redis 和 Mysql 数据库数据如何保持一致性

Redis 和 Mysql 数据库数据如何保持一致性 保持Redis和MySQL数据库数据一致性是一个常见且重要的问题,特别是在使用Redis作为MySQL数据库的缓存层时。以下是几种常用的保证二者数据一致性的策略和方法: 双写一致性(同步更新)&…

KIOXIA铠侠CD8P-R NVMe 2.0 PCIe 5.0 KCD81PUG3T84大容量SSD

今天给大家介绍一下KIOXIA铠侠CD8P-R系列3T84容量固态硬盘SSD,这是一款面向数据中心的NVMe™ SSD,专为支持各种规模的分布式和云应用而优化,包括大数据/IoT、在线交易处理和虚拟化。 接口: PCIe 5.0 (32 GT/s x4) 接口 随机读取速度&#x…

Windows完全卸载MySQL后再下载安装(附安装包)

目录 友情提醒第一章:如何完全卸载干净mysql教程(三个步骤完全卸载)1)步骤一:卸载程序2)步骤二:删除文件3)步骤三:删除注册表信息 第二章:下载软件两种方式1&…

网桥设置介绍

网桥(Networking Bridge),在计算机网络中,是一种将两个或多个网络段(物理或逻辑分段)连接在一起的设备。它工作在 OSI 模型的数据链路层(第二层),可以转发、过滤或阻止网络流量。网桥主要用于将不同的网络分段连接起来,以便它们表现为一个统一的网络。 以下是一些关…

RuleEngine规则引擎底层改造AviatorScript 之公式规则

前情提要,看上一个文章,具体要实现的效果就是 当然上来的问题就是前端的问题,这个框首先他们用的是富文本,富文本传到后台的结果是前端脚本,带着h5的标签,后面改成了这个,当时这个东西其实和后…

【力扣】238. 除自身以外数组的乘积

238. 除自身以外数组的乘积 题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使…

Java中常见的设计模式(持续更新中)

文章目录 介绍模板设计模式介绍优势代码 装饰者设计模式介绍套路代码 单例设计模式介绍步骤分类代码 多例设计模式介绍步骤代码 工厂设计模式介绍步骤代码 介绍 是一套被反复使用,多数人知晓,经过分类编目的,代码设计经验的总结使用设计模式…

express操作mysql数据库的方法总结

作为前端,我们无需去考虑数据库的问题,业务场景需要的话,我们可以mock数据,满足暂时的联调场景。但是对于数据库,我们前端可以不用,却不能不了解不懂。所以这篇文章整理下,nodejs框架express中怎…

007 spring aop(通知)(xml)

文章目录 pom.xmlLogAspect.javaStudentServiceImpl.javaStudentService.javaapplicationContext.xmlStudentServiceImplTest.java pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…

IDEA+Docker远程一键部署SpringBoot项目

一.引语 本文将学习使用IDEADocker远程一键部署SpringBoot项目&#xff0c;对比上传jar包到服务器&#xff0c;再通过java指令运行项目&#xff0c;极大程度的提高了项目部署效率。可谓不用不知道&#xff0c;一用再也停不下来~ 为了后续学习方便&#xff0c;需要提前进行如下…

Firebase集成

目标&#xff1a; 1&#xff09;集成Firebase; 2) 集成Firebase Crashlytics&#xff0c;监控APP崩溃 海外APP开发需要科学上网。 一、Firebase是什么&#xff1f; Firebase 是一个应用开发平台&#xff0c;可帮助您构建和拓展用户喜爱的应用和游戏。提供了应用的构建、发布…

Nuxt3 实战 (三):使用 release-it 自动管理版本号和生成 CHANGELOG

release-it 能做什么&#xff1f; 增加版本号并提交 Git生成变更日志&#xff08;Changelog&#xff09;并提交到 Git创建 Git 标签并推送到远程仓库发布到 npm 等软件仓库在 GitHub、GitLab 等平台创建发行版 前置知识 在看这篇文章之前&#xff0c;我们有必要了解一下 Sem…