OpenGL 入门 14:混合

透明度测试(丢弃片段)

比如在2D四边形(Quad)上渲染一个草的纹理时,值希望保留草的部分(alpha值为1.0),然而丢弃那些透明的部分(alpha值为0.0)。

因此我们可以在片元着色器中,检测一个片段的alpha值是否低于某个阈值,若果是的话,则调用GLSL给了我们discard命令,即可丢弃这个片元,接下来不进行任何处理。

#version 330 core
out vec4 FragColor;

in vec2 TexCoords;

uniform sampler2D texture1;

void main()
{             
    vec4 texColor = texture(texture1, TexCoords);
    if(texColor.a < 0.1)
        discard;
    FragColor = texColor;
}

效果:

切记:

需要将纹理的环绕方式设置为GL_CLAMP_TO_EDGE。使用GL_REPEAT模式,在采样上边缘时,会将上边缘与下边缘纯色值进行插值,从而得到错误的瑕疵。

透明度混合

混合

进行混合,首先当然需要打开混合功能。

glEnable(GL_BLEND);

混合方程:

: 源颜色向量。这是源自纹理的颜色向量。

: 目标颜色向量。这是当前储存在颜色缓冲中的颜色向量。

: 源因子值。指定了alpha值对源颜色的影响。

:目标因子值。指定了alpha值对目标颜色的影响。

因子:

因子设置函数:

void glBlendFunc(GLenum sfactor, GLenum dfactor);

void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);

// 使用源颜色向量的alpha作为源因子,使用1−alpha作为目标因子
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// 或者为RGB和alpha通道分别设置不同的选项,最终的alpha分量只受源颜色向量的alpha值所影响
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ZERO);

运算符修改:

void glBlendEquation(GLenum mode);

渲染顺序

当渲染透明物体时,渲染顺序尤为重要,由于开启深度测试,若先渲染前面的透明物体,则会导致后面的透明物体无法通过透明度测试,从而导致渲染效果出现问题。

大致的渲染熟顺序如下:

1. 先绘制所有不透明的物体。
2. 从观察者视角获取物体的距离,对所有透明的物体排序。
3. 按从远到近的顺序绘制所有透明的物体。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、第一个OPENGL程序...................................................................................................................4 1.1、OPENGL的优点..........................................................................................................................4 1.2、OPENGL的安装..........................................................................................................................4 1.3、第一个OPENGL程序.................................................................................................................5 二、点、直线和多边形..........................................................................................................................8 2.1、点、直线和多边形.....................................................................................................................8 2.2、在OPENGL中指定顶点.............................................................................................................8 2.3、绘制曲线....................................................................................................................................9 三、绘制几何图形的细节....................................................................................................................14 3.1、关于点......................................................................................................................................14 3.2、关于直线..................................................................................................................................14 3.3、关于多边形...............................................................................................................................15 四、颜色的选择...................................................................................................................................20 4.1、RGBA颜色...............................................................................................................................20 4.2、索引颜色..................................................................................................................................21 4.3、指定清除屏幕用的颜色...........................................................................................................22 4.4、指定着色模型...........................................................................................................................23 五、 三维变换.....................................................................................................................................25 5.1、模型变换和视图变换...............................................................................................................25 5.2、投影变换..................................................................................................................................26 5.3、视口变换..................................................................................................................................28 5.4、操作矩阵堆栈...........................................................................................................................29 5.5、综合举例..................................................................................................................................29 六、 动画制作.....................................................................................................................................33 6.1、双缓冲技术...............................................................................................................................33 6.2、实现连续动画...........................................................................................................................34 6.3、垂直同步..................................................................................................................................35 6.4、计算帧速..................................................................................................................................36 七、光照...............................................................................................................................................40 7.1、建立光照模型...........................................................................................................................40 7.2、法线向量..................................................................................................................................41 7.3、控制光源..................................................................................................................................41 7.4、控制材质..................................................................................................................................43 7.5、选择光照模型...........................................................................................................................43 7.6、示例程序..................................................................................................................................44 八、 显示列表.....................................................................................................................................48 8.1、分配显示列表编号...................................................................................................................48 8.2、创建显示列表...........................................................................................................................49 8.3、调用显示列表...........................................................................................................................49 8.4、销毁显示列表...........................................................................................................................50 九、 混合.............................................................................................................................................56 9.1、源因子和目标因子...................................................................................................................56 9.2、二维图形混合举例...................................................................................................................57 9.3、实现三维混合...........................................................................................................................58 十、像素操作.......................................................................................................................................63 10.1、BMP文件格式简单介绍........................................................................................................63 10.2、简单的OPENGL像素操作.....................................................................................................64 10.3、GLREADPIXELS的用法和举例................................................................................................64 10.4、GLDRAWPIXELS的用法和举例..............................................................................................68 10.5、GLCOPYPIXELS的用法和举例................................................................................................70 十一、 纹理.........................................................................................................................................73 11.1、启用纹理和载入纹理.............................................................................................................74 11.2、纹理坐标................................................................................................................................75 11.3、纹理参数................................................................................................................................76 11.4、纹理对象................................................................................................................................77 11.5、示例程序................................................................................................................................79 十二、 测试操作.................................................................................................................................87 12.1、剪裁测试................................................................................................................................87 12.2、ALPHA测试.............................................................................................................................88 12.3、模板测试................................................................................................................................92 12.4、深度测试................................................................................................................................97 十三、 OPENGL的状态....................................................................................................................99 13.1、取得OPENGL的当前状态...................................................................................................100 13.2、设置OPENGL状态...............................................................................................................101 13.3、OPENGL工作流程................................................................................................................101 十四、 OPENGL的版本和OPENGL的扩展...............................................................................104 14.1、OPENGL的版本....................................................................................................................104 14.2、OPENGL的扩展....................................................................................................................106 14.3、工具软件...............................................................................................................................110 十五、OPENGL的演进....................................................................................................................112 15.1、从原始一点的办法开始.......................................................................................................112 15.2、顶点数组...............................................................................................................................115 15.3、顶点缓冲区对象...................................................................................................................118 十六、显示文字.................................................................................................................................122 16.1、OPENGL版的“HELLO, WORLD!”.........................................................................................122 16.2、指定字体...............................................................................................................................124 16.3、显示中文...............................................................................................................................126 16.4、纹理字体...............................................................................................................................128 16.5、应用纹理字体的实例:飘动的旗帜...................................................................................132 16.6、缓冲机制...............................................................................................................................137 16.7、轮廓字体...............................................................................................................................141

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值