0

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

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

我试过 GL_CULL_FACE 但乍一看这似乎不是我想要的。

4

1 回答 1

4

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

我的猜测是,当你绘制盒子时,你打开了深度写入,这样如果盒子碰巧在磁铁之前被绘制,那么当你绘制磁铁时,它会通过深度测试,里面的部分会失败t因此而被绘制。

最简单的方法是:

  1. 先画出所有的实体对象

  2. 禁用深度写入:

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

    glBlendFunc(GL_ONE, GL_ONE)
    
  4. 绘制所有透明对象

  5. 再次启用深度写入

    glDepthMask(GL_TRUE);
    

请记住,这种简单的方法只有在您可以使用可交换混合方程时才有效,否则请考虑使用与顺序无关的透明度,一篇好文章是 Pyarelal Knowles、Geoff Leach 和法比奥赞贝塔

于 2013-05-08T17:18:27.820 回答