剪裁测试:可以在渲染时用来限制绘制区域,通过此技术可以在屏幕(帧缓冲)上指定一个矩形区域。

//启用剪裁测试
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 拉位取反

#

任意剪裁平面

  1. 给出定义剪裁平面的4个参数A、B、C、D,这4个参数分别是平面解析方程(Ax+By+Cz+D=0)中的4个系数。
  2. 将剪裁平面的4个参数传入渲染管线,以备着色器使用。
  3. 在顶点着色器中判断顶点是否在平面的一侧,具体的方法为:将顶点位置(x0,y0,z0)代入平面方程Ax+By+Cz+D=0,完成计算后将得到的值传入片元着色器。
  4. 片元着色器中根据接收到的Ax0+By0+Cz0+D表达式的值与0之间的关系就可以得出顶点与剪裁平面之间的位置关系,以决定是否丢弃片元。

若Ax0+By0+Cz0+D>0,则顶点在平面的一侧,反之在平面的另一侧。

OpenGL ES 2.0 剪裁测试的更多相关文章

  1. OpenGL ES 2.0 渲染管线 学习笔记

    图中展示整个OpenGL ES 2.0可编程管线 图中Vertex Shader和Fragment Shader 是可编程管线: Vertex Array/Buffer objects 顶点数据来源, ...

  2. OpenGL ES 3.0 基础知识

    首先要了解OpenGL的图形管线有哪些内容,再分别去了解其中的相关的关系: 管线分别包括了顶点缓冲区/数组对象,定点着色器,纹理,片段着色器,变换反馈,图元装配,光栅化,逐片段操作,帧缓冲区.其中顶点 ...

  3. OpenGL ES 2.0 混合

    混合技术 混合技术就是将俩个片元调和,主要用于将通过各项测试准备进入帧缓冲的片元(源片元)与原有片元按照设定的比例加权计算出最终片元的颜色值. OpenGL ES 2.0中是通过设置混合因子来指定两个 ...

  4. OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式

    OpenGL ES 2.0 Shader 调试新思路(一): 改变提问方式 --是什么(答案是具体值) VS 是不是(答案是布尔值) 目录 背景介绍 问题描述 Codea 是 iPad 上的一款很方便 ...

  5. 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)

    0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...

  6. 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)

    在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...

  7. 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, ...

  8. 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,   ...

  9. Android OpenGL ES 3.0 纹理应用

    本文主要演示OpenGL ES 3.0 纹理演示.接口大部分和2.0没什么区别,脚本稍微有了点变化而已. 扩展GLSurfaceView package com.example.gles300; im ...

随机推荐

  1. 在TCP协议下的数据传送

    本人小白菜逼一枚,,,,刚建立博客,也写不了太深入的,就写点上课的笔记什么的.有错误希望广大博友指出,我一定虚心学习接收改正. 我的新浪邮箱:liudaohui0805@sina.com 我的QQ邮箱 ...

  2. HIVE快速入门

    (一)简单入门 1.创建一个表 create table if not exists ljh_emp( name string, salary float, gender string) commen ...

  3. javascript中的substr和substring

    1.substr 方法 返回一个从指定位置开始的指定长度的子字符串. stringvar.substr(start [, length ]) 参数: stringvar 必选项.  要提取子字符串的字 ...

  4. 指针与数组、大小端之 printf("%x,%x,%x\n",*(a+1),ptr1[-1],*ptr2);

    在X86系统下,以下程序输出的值为多少? #include <stdio.h> #include <stdlib.h> int main(void) { ]={,,,,}; ) ...

  5. [LinqPad妙用]-在Net MVC中反射调用LinqPad中的Dump函数

    LinqPad有个非常强大的Dump函数.这篇讲解一下如何将Dump函数应用在.Net MVC Web开发中. 先看效果: 一.用.Net Reflector反编译LinqPad.exe,找出Dump ...

  6. android手机端保存xml数据

    1.前面写的这个不能继续插入数据,今天补上,当文件不存在的时候就创建,存在就直接往里面添加数据. 2.代码如下: <pre name="code" class="j ...

  7. HADOOP再进阶:本地Yum软件源安装Cloudera Manager 5

    参考URL: http://blog.csdn.net/yangzhaohui168/article/details/30118175 http://blog.csdn.net/yangzhaohui ...

  8. Cmake 脚本对预处理器的宏定义

    我们有些时候会在#if   #ifndef   等预编译命令里面看到_WIN32等定义的宏.但是有些宏定义,你即使通过Visual Studio右键的go to definitions 和go to ...

  9. 介绍几个移动web app开发框架

    jQuery Mobile jQuery Mobile框架能够帮助你快速开发出支持多种移动设备的Mobile应用用户界面.jQuery Mobile最新版本是1.4.0,默认主题采用扁平化设计风格.j ...

  10. Linux文件io--one简述

    什么是文件IO IO就是input/output,输入/输出.文件IO的意思就是读写文件. 文件操作的主要接口API 什么是操作系统API (1)API是一些函数,这些函数是由linux系统提供支持的 ...