OpenGl选择

时间:2013-05-08 16:41:59

标签: opengl mouseevent

我正在创建一个盒子并在底部放置“磁铁”。两侧略微透视(alpha介于.2和.5之间),底部是实心的。我正在尝试使用gluUnProject()来选择放置“磁铁”的位置,但是当盒子的两侧被渲染时,我无法将磁铁放入盒子中。

无论如何仍然需要渲染墙的两侧但是为了鼠标点击而忽略它们?

我已经尝试过GL_CULL_FACE,但乍一看似乎不是我想要的。

1 个答案:

答案 0 :(得分:4)

因此,如果我理解正确,你有半透明的盒子,当磁铁在盒子里面时,你想根据盒子的半透明度看到磁铁。

我的猜测是,当您绘制框时,您已经开启了深度写入,这样如果盒子碰巧在磁体之前被绘制,那么当您绘制磁体时它将无法通过深度测试而且部分是因此,内部不会被绘制。

最简单的方法是:

  1. 首先绘制所有实体对象

  2. 禁用深度写入:

    glDepthMask(GL_FALSE);
    
  3. 绘制半透明对象时使用与顺序无关的混合函数,例如:

    glBlendFunc(GL_ONE, GL_ONE)
    
  4. 绘制所有透明物体

  5. 再次启用深度写入

    glDepthMask(GL_TRUE);
    
  6. 请记住,这个简单的方法只有在你可以使用交换混合方程时才能起作用,如果不是那么考虑使用与顺序无关的透明度,一篇好文章是“高效的分层碎片缓冲技术”,由Pyarelal Knowles,Geoff提供Leach和Fabio Zambetta