OpenGL ES for Android(混合)

本文介绍了在Android中使用OpenGL ES处理物体透明的两种方式:丢弃片段和混合。丢弃片段通过在片段着色器中使用discard关键字丢弃透明度低于一定阈值的片段。混合则涉及启用混合功能和设置混合因子,用于处理多个半透明物体的叠加。在混合过程中,需要考虑深度测试的影响,确保正确排序并绘制物体。文章以小草和窗户的示例展示了这两种方法的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

在之前使用物体时没考虑过透明的情况,而混合就是除了物体透明度的一种方式。在处理物体透明时一般有两种方式,一种是直接丢弃掉透明度达到一定程度的部分;另外一种就是混合。例如一扇窗户如果是全透明的我们看到的物体就是窗口后的物体;如果它是半透明的有色玻璃时,看到的就是玻璃和窗口后物体的叠加。之前我们使用纹理的颜色都是纹理的rgb颜色,没有用到最后一个alpha(也就是透明度),alpha的范围是0到1,1表示不透明,0表示全透明。

丢弃片段

有些物体的部分,要么是全透明,要么是不透明,不存在其他的情况下,我们选择丢弃掉透明的部分来显示。例如下面这个小草的图片:

 

首先我们先用它来显示不做任何处理的情况,我们改变位置显示几个纹理,一些关键代码:

       private float[][] translate = new float[][]{
            {-1.5f, 0.0f, -0.48f},
            {1.5f, 0.0f, 0.51f},
            {0.0f, 0.0f, 0.7f},
            {-0.3f, 0.0f, -2.3f},
            {0.5f, 0.0f, -0.6f}};
    ……
    for (float[] vegetation : translate) {
         Matrix.setIdentityM(modelMatrix, 0);
         Matrix.translateM(modelMatrix, 0, vegetation[0], vegetation[1], vegetation[2]);
         //Matrix.rotateM(modelMatrix, 0, angleInDegrees, 0.0f, 1.0f, 0.0f);
 
       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值