我正在创建一个盒子并在底部放置“磁铁”。侧面略微透明(alpha 介于 0.2 和 0.5 之间),底部是实心的。我正在尝试使用 gluUnProject() 来选择放置“磁铁”的位置,但是当渲染盒子的侧面时,我无法将磁铁放入盒子中。
无论如何仍然要渲染墙壁的侧面,但为了点击鼠标而忽略它们?
我试过 GL_CULL_FACE 但乍一看这似乎不是我想要的。
我正在创建一个盒子并在底部放置“磁铁”。侧面略微透明(alpha 介于 0.2 和 0.5 之间),底部是实心的。我正在尝试使用 gluUnProject() 来选择放置“磁铁”的位置,但是当渲染盒子的侧面时,我无法将磁铁放入盒子中。
无论如何仍然要渲染墙壁的侧面,但为了点击鼠标而忽略它们?
我试过 GL_CULL_FACE 但乍一看这似乎不是我想要的。
所以如果我理解正确,你有半透明的盒子,当磁铁在盒子里时,你想根据盒子的半透明看到磁铁。
我的猜测是,当你绘制盒子时,你打开了深度写入,这样如果盒子碰巧在磁铁之前被绘制,那么当你绘制磁铁时,它会通过深度测试,里面的部分会失败t因此而被绘制。
最简单的方法是:
先画出所有的实体对象
禁用深度写入:
glDepthMask(GL_FALSE);
绘制半透明对象时使用与顺序无关的混合函数,例如:
glBlendFunc(GL_ONE, GL_ONE)
绘制所有透明对象
再次启用深度写入
glDepthMask(GL_TRUE);
请记住,这种简单的方法只有在您可以使用可交换混合方程时才有效,否则请考虑使用与顺序无关的透明度,一篇好文章是 Pyarelal Knowles、Geoff Leach 和法比奥赞贝塔