【问题标题】:Opengl Selection with Alpha Test带有 Alpha 测试的 Opengl 选择
【发布时间】:2009-07-28 21:29:40
【问题描述】:

根据我在互联网上看到的情况,我的方法无法真正解决这个问题。

我目前正在编写一个程序,该程序使用选择缓冲区传递场景中的所有对象。但是,其中一个对象是纹理,其中很大一部分具有 alpha 0。它在渲染时工作正常,不显示 alpha 值,但在选择模式下,会跳过 alpha 测试,并将鼠标悬停在透明区域选择对象而不是它后面的任何东西。

有没有办法在选择模式下启用 alpha 测试?

【问题讨论】:

    标签: opengl selection textures


    【解决方案1】:

    我认为您的意思是跳过了 alpha 混合。我还没有测试过它,但从评论here 中可以看出,alpha 测试仍在 GL_SELECT 模式下使用。所以你会想要 glEnable(GL_ALPHA_TEST) 然后使用 glAlphaFunc() 来设置你的阈值,以确定多少 alpha 构成命中。要在盲目尝试选择这些对象之前进行测试,只需渲染它。你会看到 OpenGL 只渲染你的多边形的一部分;并且该部分中的任何部分都将构成一次点击,而任何未绘制的部分都不会被您的 GL_SELECT 命中。

    请发表评论,让我知道结果如何。如果你仍然不能让它工作,我可以花时间为你写一个测试用例,但如果你能自己让它工作,我宁愿不花时间。 :)

    另外,作为参考,the OpenGL docs for Alpha testthe manpage for glAlphaFunc

    【讨论】:

      【解决方案2】:

      看起来 glReadPixels 就是你要找的东西

      http://www.opengl.org/sdk/docs/man/xhtml/glReadPixels.xml

      使用类似的东西:

      glReadPixels (0, 0, XSCREEN, YSCREEN, GL_ALPHA, GL_UNSIGNED_BYTE, buffer);
      

      【讨论】:

      • 这有什么帮助?我不想弄清楚缓冲区中有什么,我只想让拾取代码在鼠标下方的空白区域不返回任何内容。
      • 缓冲区将包含给定像素的 alpha(不透明度)
      猜你喜欢
      • 2015-10-12
      • 2012-08-04
      • 2012-12-06
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      相关资源
      最近更新 更多