【问题标题】:OpenGl Blending: Identical Transparent ObjectsOpenGL 混合:相同的透明对象
【发布时间】:2012-05-01 21:20:56
【问题描述】:

我正在进行一个 OpenGL 项目。

我有一些由相同透明材料(例如 alpha = 0.2)制成的对象(仅说 2 个)。两个物体相交。

我怎样才能让交叉部分看起来和其他部分一样(没有边框,没有不同的颜色),所以太对象看起来像一个?

【问题讨论】:

    标签: opengl blending


    【解决方案1】:

    我不确定你是否真的想这样做。无论如何我都会回答,但首先让我告诉你为什么我认为你不想要那个。

    在现实生活中,想象一个红色的彩色玻璃和一个蓝色的玻璃。如果您以它们部分重叠的方式查看它们,则重叠部分显然具有不同的颜色(紫色)。如果你拿到 2 个红色眼镜并看着它们重叠,重叠的部分会更红。这正是您的 OpenGL 程序中正在发生的事情。

    现在一般来说,当您有多个透明对象时,您需要根据它们与您的眼睛的距离和您所看的方向对它们进行排序。然后你从最远到最近绘制它们。这本身并不是一项简单的任务!想想 2 个交叉的对象。

    实现您想要的一种方法是对透明对象进行排序,但从最近的对象绘制到最远的对象。这样,您实际上不允许对同一像素进行两次透明处理。不是个好主意。

    另一种方法是对这些特殊类型的对象做一些非常具体的事情。我说特殊类型,因为显然它们中的两个重叠并没有做出任何改变!您可以通过绘制到模板缓冲区而不是绘制缓冲区来做您想做的事情,然后在整个屏幕上绘制一个具有您想要的颜色的矩形,但只匹配该模板。

    【讨论】:

    • 感谢您的快速回复,Shahbaz。我正在模拟细胞分裂过程 [链接]stackoverflow.com/questions/10393433/…。我这样做的方法是创建两个相同的单元格,然后将它们分开。所以我真的希望当两个细胞没有分开时,它们看起来像一个。用户应该能够在场景中移动,所以第一个选项似乎很难遵循。您能否提供一个链接,我可以在其中尝试第二个选项(使用模板缓冲区)?
    • 有人建议用其他方法来模拟细胞分裂过程或涉及对象复制的类似过程吗?
    • 我从“The OpenGL bible”一书中学习了模板缓冲区,所以我不知道互联网上哪些资源好,但我可以告诉你,有很多。只需谷歌它,你应该能够找到好的东西。
    • 另外,为什么你的单元格是透明的?
    • 这样你就可以看到它们的内部并看到它们的器官。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2015-11-04
    • 2012-04-05
    • 1970-01-01
    • 2023-03-11
    相关资源
    最近更新 更多