OpenGL ES 2.0 - 几种剪裁与测试

2024-03-06 22:48
文章标签 es 测试 几种 opengl 2.0 剪裁

本文主要是介绍OpenGL ES 2.0 - 几种剪裁与测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenGL ES 2.0 - 几种剪裁与测试

剪裁测试

剪裁测试可以在渲染时用来限制绘制区域,通过此技术可以在屏幕(帧缓冲)上指定一个矩形区域.
不在此矩形区域内的片元将被丢弃,只有在矩形区域内的片元才有机会最终进入帧缓冲.

代码

GLES20.glEnable(GL10.GL_SCISSOR_TEST);//启用剪裁测试
GLES20.glScissor(0,//剪裁区域左下角X坐标200,//剪裁区域左下角Y坐标100,//剪裁区域的宽度200//剪裁区域的高度(以上单位:像素));
GLES20.glDisable(GL10.GL_SCISSOR_TEST);//禁用剪裁测试

Alpha测试

剪裁测试的区域只能是矩形.Alpha测试是一种可以实现任意形状绘制区域的技术.

原理

当绘制一个片元时,首先检测其Alpha值,若Alpha值满足要求,则通过测试,绘制此片元,否则丢弃此片元.

Alpha测试之片元着色器代码
precision mediump float;//给出默认的浮点精度
varying vec2 vTextureCoord;//从顶点着色器传过来的纹理坐标
uniform sampler2D sTexture;//纹理内容数据
void main() {vec4 bcolor = texture2D(sTexture, vTextureCoord);//根据纹理坐标采样出颜色值if(bcolor.a < 0.6) {//若Alpha值小于0.6,将片元丢弃discard;//此操作的功能为丢弃当前片元.} else {gl_FragColor = bcolor;//否则将此颜色作为片元的颜色}
}

模板测试

模板测试也称为蒙版测试.
例如:需要绘制一个不规则形状的池塘及周围树木池塘中倒影的场景,为了保证倒影被正确绘制不越界.
这里写图片描述
核心代码

GLES20.glClear(GLES20.GL_STENCIL_BUFFER_BIT);//清除模板缓冲
GLES20.glEnable(GLES20.GL_STENCIL_TEST);//允许模板测试
GLES20.glStencilFunc(GLES20.GL_ALWAYS, 1, 1);//设置模板测试参数
GLES20.glStencilOp(GLES20.GL_KEEP, GLES20.GL_KEEP, GLES20.GL_REPLACE);//设置模板测试后的操作
GLES20.glDisable(GLES20.GL_STENCIL_TEST);//禁用模板测试

模板测试的8种比较模式

比较模式含义
GL_NEVER从不通过模板测试
GL_ALWAYS总是通过模板测试
GL_LESS只有 参考值<(模板缓冲区的值&mask)是才通过
GL_LEQUAL只有 参考值<=(模板缓冲区的值&mask)是才通过
GL_EQUAL只有 参考值=(模板缓冲区的值&mask)是才通过
GL_GEQUAL只有 参考值>=(模板缓冲区的值&mask)是才通过
GL_GREATER只有 参考值>(模板缓冲区的值&mask)是才通过
GL_NOTEQUAL只有 参考值!=(模板缓冲区的值&mask)是才通过

任意剪裁平面 - 待日后研究

这篇关于OpenGL ES 2.0 - 几种剪裁与测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/781618

相关文章

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、