【问题标题】:Transparent Texture With OpenGL-ES 2.0使用 OpenGL-ES 2.0 的透明纹理
【发布时间】:2019-08-12 19:30:28
【问题描述】:

我正在尝试在立方体顶部添加透明纹理。只有正面是不透明的。其他面是透明的。可能是什么问题呢?。任何帮助表示赞赏。

编辑:我发现首先绘制的脸是不透明的。

立方体的3个面被绘制出来。

不透明的脸。((这个脸的索引首先在 GLdrawElements 中给出))

透明的脸。

【问题讨论】:

    标签: iphone ios opengl-es opengl-es-2.0


    【解决方案1】:

    您很可能遇到了排序问题。要正确显示透明几何图形,必须从后到前对对象的面进行排序。

    不幸的是,opengl-es(或现有的任何 gfx 库)中没有内置支持。唯一的可能性是对多边形进行排序,每帧重新创建对象并使用正确排序的面进行绘制。

    一种解决方法是使用附加透明度而不是普通透明度。加性透明度是一个与顺序无关的计算。您必须记住在绘图时关闭 z-buffer 写入,否则某些几何图形可能会被遮挡。

    通过将两个 blendfunc 值都设置为 GL_ONE 来实现附加透明度。

    【讨论】:

    • 我没有透明的层次结构。多边形的不透明度是相同的。我的问题是纹理。我有透明的 .png 。对于立方体的第一个绘制表面,它是不透明的。我也清除了 CGcontext 。
    • 你能把截图上传到某个地方吗?也许这可以帮助找到问题。
    • 我已经上传了图片!。红色的一面是不透明的。首先绘制红色多边形。如果我先画黄色的脸,它就会变得不透明。
    • 1.我纠正了一个错误,我的意思是从前到后,而不是从前到后。 2. 这看起来很像我描述的问题。您绘制的第一张脸与黑色背景混合,然后看起来不透明。如果那张脸确实是最远的那张脸,那么一切看起来都很好,直到您旋转立方体。然后第一个面被绘制为“不透明”(它不与屏幕上的任何东西混合),而其他人则由于 z 缓冲区裁剪而隐藏在该面后面。
    • 你是绝对正确的!我误解了。非常感谢!
    猜你喜欢
    • 2013-11-05
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多