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 ...
随机推荐
- c++中vector等容器的实现机制
stl容器区别: vector list deque set map-底层实现 stl容器区别: vector list deque set map (转) 在STL中基本容器有: vector.li ...
- php 之 类,对象(三)多态性,函数重载,克隆
一.三大特性之三 多态性(在php中表象不明显)1.概念:当父类引用指向子类实例时,由于子类对父类函数进行了重写,导致我们在使用该引用去调用相应的方法显示出的不同.2.发生条件:1.必须有继承 2. ...
- 指针与数组、大小端之 printf("%x,%x,%x\n",*(a+1),ptr1[-1],*ptr2);
在X86系统下,以下程序输出的值为多少? #include <stdio.h> #include <stdlib.h> int main(void) { ]={,,,,}; ) ...
- Idea使用记录--添加Problems&&解决Autowired报错could not autowire
今天在使用Idea的时候,发现Idea在整个每次找到错误代码非常不方便(Idea如果类中有错误,没有打开过类并不会提示,比如构建工程后缺少jar包问题).我想快速看到工程哪里出问题类似于eclipse ...
- Content-Disposition的使用方法
一.作用: 1)希望某类或者某已知MIME类型的文件(比如:*.gif;*txt;*.htm)能够在访问时弹出"文件下载对话框" 2)希望客户端下载时以指定文件名显示 3)希望某文 ...
- FJ省队集训DAY4 T1
直接上题解 #include<cstdio> #include<iostream> #include<cmath> #include<cstring> ...
- JavaScript对象基础知识
1.对象所包含的元素一组包含数据的属性.如人的名字.书的价格和手机型号等.允许对属性中所包含的数据进行操作的方法. 2.引用对象的途径一个对象真正地被使用,可以采用以下几种方式.引用Javascrip ...
- cp 提示 overwrite 问题
cp 提示 overwrite 问题 copy -f 文件的时候仍然提示覆盖问题,很诧异,咨询SA,果然 cp -i 强制要求覆盖文件的时候确认,-f 也不起作用,大大的不爽[root@erpappd ...
- 【转】Windows 7下硬盘安装Ubuntu 14.04图文教程--不错
原文网址:http://www.linuxidc.com/Linux/2014-04/100369p3.htm Ubuntu 官方已经发布了正式版的 Ubuntu 14.04 LTS,并宣称这是为云计 ...
- JAVA车票管理系统(简单GUI)
一. 需求分析 1.设计题目:车票管理系统 用JAVA语言和数据结构知识设计设计车票管理系统.要求如下所述: 一车站每天有n个发车班次,每个班次都有一个班次号(1.2.3…n),固定的发车时间, ...