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

相关文章

JDK21对虚拟线程的几种用法实践指南

《JDK21对虚拟线程的几种用法实践指南》虚拟线程是Java中的一种轻量级线程,由JVM管理,特别适合于I/O密集型任务,:本文主要介绍JDK21对虚拟线程的几种用法,文中通过代码介绍的非常详细,... 目录一、参考官方文档二、什么是虚拟线程三、几种用法1、Thread.ofVirtual().start(

java中判断json key是否存在的几种方法

《java中判断jsonkey是否存在的几种方法》在使用Java处理JSON数据时,如何判断某一个key是否存在?本文就来介绍三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目http://www.chinasem.cn录第一种方法是使用 jsONObject 的 has 方法

Java中InputStream重复使用问题的几种解决方案

《Java中InputStream重复使用问题的几种解决方案》在Java开发中,InputStream是用于读取字节流的类,在许多场景下,我们可能需要重复读取InputStream中的数据,这篇文章主... 目录前言1. 使用mark()和reset()方法(适用于支持标记的流)2. 将流内容缓存到字节数组

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

在Java中实现线程之间的数据共享的几种方式总结

《在Java中实现线程之间的数据共享的几种方式总结》在Java中实现线程间数据共享是并发编程的核心需求,但需要谨慎处理同步问题以避免竞态条件,本文通过代码示例给大家介绍了几种主要实现方式及其最佳实践,... 目录1. 共享变量与同步机制2. 轻量级通信机制3. 线程安全容器4. 线程局部变量(ThreadL

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... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系