OpenGL ES 2.0 剪裁测试
剪裁测试:可以在渲染时用来限制绘制区域,通过此技术可以在屏幕(帧缓冲)上指定一个矩形区域。
//启用剪裁测试
GLES20.glEnable(GL10.GL_SCISSOR_TEST);
//设置区域
GLES20.glScissor(0,480,230,200);
//禁用剪裁测试
GLES20.glDisable(GL10.GL_SCISSOR_TEST);
Alpha测试:当绘制一个片元时,首先检测其Alpha值,若Alpha值满足要求,则通过测试,绘制此片元,负责丢弃此片元,不进行绘制。
discard:丢弃片元
模板测试(蒙版测试):渲染管线在模板中为每个位置的片元保存了一个"模板值",当像素需要进行模板测试时,将设定的模板参考值与该片元对应位置的模板值比较,符合条件的片元通过测试,不符合条件的则被丢弃,不进行渲染。
//清除模板缓存
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);
glStencilFunc
- 第一个参数:比较模式
- 第二个参数:参考值
- 第三个参数:mask
比较模式 含义 GL_NEVER 从不通过模板测试 GL_ALWAYS 总是通过模板测试 GL_LESS 只有参考值<(模板缓冲区的值&mask)时才通过 GL_LEQUAL 只有参考值<=(模板缓冲区的值&mask)时才通过 GL_EQUAL 只有参考值=(模板缓冲区的值&mask)时才通过 GL_GEQUAL 只有参考值>=(模板缓冲区的值&mask)时才通过 GL_GREATER 只有参考值>(模板缓冲区的值&mask)时才通过 GL_NOTEQUAL 只有参考值!=(模板缓冲区的值&mask)时才通过
#
glStencilOp
- 第一个参数:表示模板测试未通过时此片元对应的模板值该如何变化。
- 第二个参数:表示模板测试通过,但深度测试未通过时此片元对应模板值该如何变化。
- 第三个参数:表示模板测试和深度测试均通过时,此片元对应的模板值该如何变化。
*如果没有启用深度测试,则认为深度测试总是通过的。
参数值 模板值变化情况 GL_KEEP 不改变 GL_ZERO 回零 GL_REPLACE 使用测试条件中的设定值来代替当前模板值 GL_INCR 增加1,但如果已经是最大值,则保持不变 GL_INCR_WRAP 增加1,但如果已经是最大值,则重新从零开始 GL_DECR 减少1,如如果已经是零,则保持不变 GL_DECR_WRAP 减少1,但如果已经是零,则保持不变 GL_INVERT 拉位取反
#
任意剪裁平面
- 给出定义剪裁平面的4个参数A、B、C、D,这4个参数分别是平面解析方程(Ax+By+Cz+D=0)中的4个系数。
- 将剪裁平面的4个参数传入渲染管线,以备着色器使用。
- 在顶点着色器中判断顶点是否在平面的一侧,具体的方法为:将顶点位置(x0,y0,z0)代入平面方程Ax+By+Cz+D=0,完成计算后将得到的值传入片元着色器。
- 片元着色器中根据接收到的Ax0+By0+Cz0+D表达式的值与0之间的关系就可以得出顶点与剪裁平面之间的位置关系,以决定是否丢弃片元。
若Ax0+By0+Cz0+D>0,则顶点在平面的一侧,反之在平面的另一侧。
OpenGL ES 2.0 剪裁测试的更多相关文章
- OpenGL ES 2.0 渲染管线 学习笔记
图中展示整个OpenGL ES 2.0可编程管线 图中Vertex Shader和Fragment Shader 是可编程管线: Vertex Array/Buffer objects 顶点数据来源, ...
- OpenGL ES 3.0 基础知识
首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...
- OpenGL ES 2.0 混合
混合技术 混合技术就是将俩个片元调和,主要用于将通过各项测试准备进入帧缓冲的片元(源片元)与原有片元按照设定的比例加权计算出最终片元的颜色值. OpenGL ES 2.0中是通过设置混合因子来指定两个 ...
- OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式
OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式 --是什么(答案是具体值) VS 是不是(答案是布尔值) 目录 背景介绍 问题描述 Codea 是 iPad 上的一款很方便 ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...
- Beginning OpenGL ES 2.0 with GLKit Part 1
Update 10/24/12: If you’d like a new version of this tutorial fully updated for iOS 6 and Xcode 4.5, ...
- OpenGL ES 3.0 点,线,三角形绘制形式总结
OpenGL ES 3.0 顶点 -1, 1, 0, -0.5f, 0, 0, 0, -1, 0, -1, 0, 0, 0.5f, 0, 0, 1, -1, ...
- Android OpenGL ES 3.0 纹理应用
本文主要演示OpenGL ES 3.0 纹理演示.接口大部分和2.0没什么区别,脚本稍微有了点变化而已. 扩展GLSurfaceView package com.example.gles300; im ...
随机推荐
- Css3图片圆角,兼容所有浏览器
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- css中“zoom:1”是什么意思
继承性: 无 兼容性: IE 基本语法 zoom : normal | number 语法取值 normal : 默认值.使用对象的实际尺寸 number : 百分数 | 无符号浮点实数.浮点实数 ...
- HTML&CSS基础学习笔记1.2-HTML的全局属性?
HTML元素都有属性,下面的这些全局属性是所有的HTML元素都可以使用的. 常见的有: HTML元素也有一些本身自己独特的属性,我们以后的笔记中有机会,会再为大家介绍哦. 下面是代码测验,具体的内容可 ...
- Swift字符串的插入、删除和替换-备
对应可变字符串可以插入.删除和替换,String提供了几个方法可以帮助实现这些操作.这些方法如下: splice(_:atIndex:).在索引位置插入字符串. insert(_:atIndex:). ...
- 查看服务器IP连接数之主要命令(在服务器受攻击时用)
查看TCP几种状态的总数 netstat -n | awk '/^tcp/ {++S[$NF]} END {fo (a in S). print a, S[a]}' 按IP查看连接数排序 netsta ...
- About Undefined Behavior[译文]
原文:blog.llvm.org/2011/05/what-every-c-programmer-should-know.html 人们偶尔会问为什么LLVM的汇编代码有时会在优化器打开时产生SIGT ...
- GNU Autotools的研究(转)
最近对Linux下软件项目的构建过程研究了一番.Linux下的软件项目通常用Autotools工具集和make工具来构建,我们通常使用./configure.make.make install这样的命 ...
- 2015第23周一SVN插件安装
之前想把eclipse(3.7)的SVN插件版本从1.8.x降到1.6.x,上午折腾了好久没弄好,先是尝试在线安装,按网上说的1.6.x的url安装不成功(可能是网络问题,下载不到资源),然后尝试下载 ...
- 优质办公体验,掌上OA一机hold住全场
20多年前,人们希望可以脱离文件满天飞的办公办公环境,OA办公自动化出现了:随后.人们希望能在不同部门.不同分支机构间互通有无,打破信息孤岛.应用孤岛.数据孤岛,协同OA出现了:今天,人们梦想随时随地 ...
- STL中,back_insert_iterator与back_inserter的区别。
1.参考http://www.cplusplus.com网站关于back_insert_iterator与back_inserter的介绍之后,我总算明白了:back_insert_iterator, ...