OpenGL 中使用抗锯齿拾色?
我在 OpenGL 中的颜色选择和抗锯齿方面遇到问题。当 AA 被激活时,glReadPixels 的结果在对象边缘和对象交叉点上明显是错误的。例如:
我在框 #32 (RGBA: 32, 0, 0, 0) 附近渲染框 #28 (RGBA: 28, 0, 0, 0)。使用 AA,由于 AA 算法,我可能会在立方体和三角形重叠处得到错误的 ReadPixel 值(例如 30),或者在框边缘得到 14 的值。
我有大约 400 万个物体需要能够挑选(这是一个拼图游戏)。能够按形状选择对象至关重要。
我尝试使用 glDisable(GL_MULTISAMPLE) 禁用 AA,但它不适用于某些 AA 模式(我读到它取决于 AA 实现 - SS、MS、CS ..)
那么,如何选择底层对象?
- 有办法暂时禁用AA吗?
- 使用不同的缓冲区甚至渲染上下文?
- 还有其他建议吗?
I'm having a problem with color picking and antialiasing in OpenGL. When AA is activated results from glReadPixels are obviously wrong on object edges and object intersections. For example:
I render a box #28 (RGBA: 28, 0, 0, 0) near a box #32 (RGBA: 32, 0, 0, 0). With AA, I can get a wrong ReadPixel value (e.g. 30) where the cube and triangle overlap, or value of 14 on boxes edge, due to the AA algorithm.
I have ~4000 thousand objects I need to be able to pick (it's a jigsaw puzzle game). It is vital to be able to select objects by shape.
I've tried to disable AA with glDisable(GL_MULTISAMPLE) but it does not works with certain AA modes (I read it depends on AA implementation - SS, MS, CS ..)
So, how do I pick an underlying object?
- A way do temporary disable AA?
- Using a different buffer or even rendering context?
- Any other suggestion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我使用这个技巧:不仅选取一个像素,而且选取选取点周围的所有 3x3=9 像素。如果它们都一样,我们就安全了。否则,它一定处于边缘状态,我们可以跳过它。
I use this hack: pick not just one pixel, but all the 3x3=9 pixels around the picking point. If they are all same, we are safe. Otherwise, it must be on edge and we can skip that.
为什么不使用 FBO 作为您的挑选缓冲区?
Why not use an FBO as your pick buffer?