美文网首页
Android 使用opengles 设置背景透明

Android 使用opengles 设置背景透明

作者: 怪咖小青年_56e8 | 来源:发表于2022-04-20 15:54 被阅读0次

    需求:3Dview右下角添加坐标系
    处理方案:叠加了一层坐标系view,但是坐标系背景默认黑色,无法看到下方被覆盖的3D图形
    问题:需设置其坐标系背景为透明色,达到3D图形正常观看的目的

    代码设置:
    使用8888 (RGBA) 格式,Alpha通道启用: mGLSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
    为GLView指定透明通道:
    mGLSurfaceView.getHolder() .setFormat(PixelFormat.TRANSLUCENT)。
    在Render类中设置glClearColor(0,0,0,0);
    这样,整个GLView的背景就被设置成透明的了。

    第二个问题是纹理中有透明时,想让它透过背面的3D物体。这个就要设置混合了。首先要开启混色功能glEnable(GL_BLEND).其次还要为它指定混色方案。这里面就要选用 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)了。最后需要注意的问题是先画不透明或是透明物体后方的物体,然后再画透明物体。这样就可以通过透明物体看到它背后的3D物体了。

    下面解释下常用的混色方案:
    

    glBlendFunc(GL_ONE, GL_ONE); 即源与目标颜色的RGBA分别相加。
    glBlendFunc(GL_ONE, GL_ZERO); 即只取源颜色,这也是默认值。
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 是比较典型的半透明效果,如果源色 alpha 为0,则取目标色,如果源色alpha为1,则取源色,否则视源色的alpha大小各取一部分。源色的alpha越大,则源色取的越多,最终结果源色的表现更强;源色的alpha越小,则目标色“透过”的越多。

    一定要谨记的是:渲染过程中,都会把有半透明效果的渲染放到后边,先把不透明的部分在深度测试启用的情况下渲染完, 再关闭深度测试写入(glDepthMask(false)),并渲染半透明的部分。这样就不会出现由于半透明且离镜头近的面被先渲染时污染深度缓冲了。
    

    原文链接:https://blog.csdn.net/renai2008/article/details/7956988

    相关文章

      网友评论

          本文标题:Android 使用opengles 设置背景透明

          本文链接:https://www.haomeiwen.com/subject/zgpvertx.html