帧缓冲区

1.裁剪测试
glScissor(GLint x, GLint y, GLsizei width, GLsizei height);设置裁剪矩形,在矩形内的被绘制,x, y为裁剪矩形的左下角。
需要用glEnable和glDisable,参数GL_SCISSOR_TEST启用和禁用裁剪测试。
glGetIntegerv(GL_SCISSOR_BOX);获取裁剪矩形
2.alpha测试
glEnable, glDisable传递参数GL_ALPHA_TEST,开启和禁止alpha测试
将片段的alpha值与参考值对比决定显示或拒绝。
glAlphaFunc(GLenum func, GLclampf ref)设置参考值和比较函数
glGetIntegerv(),传递GL_ALPHA_TEST_FUNC, GL_ALPHA_TEST_TEST_REF获取参数。
应用: alpha可以实现透明第一次绘制alpha=1的片断,然后将深度测试设置为只读,绘制其他图像
 纹理图像制作贴花,将贴花透明部分alpha设置0,其他为1,参考值为0.5, 函数为GL_GREATER.
3.模板测试
在存模板缓冲区的情况下执行。glStencilFunc()和glStencilOp()选择要使用的特定比较函数、参考值和对模板缓冲区所执行的修改。
glStencilFunc(GLenum func, GLint ref, GLuint mask);
glStencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);
glStencilOp(GLenum fail, GLenum zfail, GLenum zpass);
glStencilOpSeparate(GLenum face, GLenum fail , GLenum zfail, GLenum zpass);
glGetIntegerv()获取与模板相关的参数值;
glIsEnable(GL_STENCIL_TEST)判断模板测试是否被启用
4. 深度测试
glDepthFunc(GLenum func);指定深度测试函数
遮挡查询:判断一组典型的几何图形在深度测试后是否可见
使用遮挡查询步骤:
a 为每个要进行的遮挡查询生成一个查询ID。glGenQueries(GLsizei n, GLuint* ids); glIsQuery(GLuint id);查询一个id是否被使用
b 调用glBeginQuery(GLenum target, GLuint id)表示一个查询开始,target必须是GL_SAMPLES_PASSED,
c 渲染需要进行查询的几何图形,除glGenQueries和glDeleteQueries之外的几乎所有opengl操作
d 调用glEndQuery(GLenum target)结束查询,target必须为GL_SAMPLES_PASSED
e 提取经过遮挡查询的样本数量
glGetQueryObject[u]iv(GLenum id, GLenum pname, GLint * params); id为查询id, pname为GL_QUERY_RESULT时为通过测试数量, 为GL_QUERY_RESULT_AVAILABLE时为查询是否有效。
glDeleteQueries(GLsizei n, const GLuint* ids);清除查询对象。
5. 混合、抖动、逻辑操作
混合:将源片断的RGBA值同已经存在的颜色缓冲区中的值进行混合处理
抖动:使用抖动增加颜色
逻辑操作:
glEnable,glDisable调用GL_INDEX_LOGIC_OP,GL_COLOR_LOGIC_OP启用、禁用操作
glLogicOp(GLenum opcode)选择需要执行的操作
6. 累积缓冲区
用于场景抗锯齿、运动模糊、景深模拟、多个光源导致的柔和阴影等。
glAccum(GLenum op, GLfloat value);控制累积缓冲区
GL_ACCUM  冲glReadBuffer()所选择的缓冲区中读取每个像素把RGBA值与value相乘,把结果添加到累积缓冲区中
GL_LOAD 用GL_ACCUM里的到的值替换累积缓冲区里的值
GL_RETURN 从累积缓冲区里接受值,把它与value相乘后把结果放入可以写入的颜色缓冲区中
GL_ADD、GL_MULT  将累积缓冲区中的值与value相加或相乘并返回到累积缓冲区中,其中GL_MULT时结果截取为[-1, 1]
场景抗锯齿:
清除累积缓冲区,开启前缓冲区的读取和写入,循环执行绘制操作n次,对图像进行微移并用glAccum(GL_ACCUM, 1.0/n),最后调用glAccum(GL_RETURN, 1.0)将结果绘制到可显示的颜色缓冲区中。
运动模糊:
调用glAccum(GL_MULT, decayFactor);decayFactor为[0,1]之间,对运动进行模糊
景深:
使相机进行微小移动,但始终要覆盖聚焦平面,然后对累积缓冲区进行平均处理。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值