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

相关文章

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

python忽略warnings的几种方法

《python忽略warnings的几种方法》本文主要介绍了几种在Python忽略警告信息的方法,,可以使用Python内置的警告控制机制来抑制特定类型的警告,下面就来介绍一下,感兴趣的可以了解一下... 目录方法 1: 使用 warnings 模块过滤特定类型和消息内容的警告方法 2: 使用 warnin

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操