我正在学习opengl es并计划制作一个程序,其形状可以通过动态移除部分形状而切成较小的形状。约束是我必须能够判断对象是在切割形状的内部还是外部。
我想到的选项是: 1)使用仅由黑白掩模组成的模板缓冲区。这样我也可以使用相同的地图进行碰撞检测。 2)另一个选择是动态地改变我的思维渲染原语然后测试它。这听起来更复杂,目前是我最不喜欢的选择。它还会使碰撞检测更加困难。
PS 我希望移除的形状部分在动画中掉落,我不确定选择这些方法中的任何一个会影响这样做的容易程度。请表达你的意见。
您对此有何看法? 请记住,我是新手,可能会在没有意识到的情况下犯错误。
谢谢,杰森
答案 0 :(得分:2)
通常认为只向图形卡发出写命令是个好主意。基本上就是“根本不使用glGet *命令”,因为这些命令的延迟可能有些高。
如果您只想掩盖内容,那么选项1)是很好的。当您试图使切割部分脱落时,这实际上不是一个选项,因为您必须检索/重建该部分的顶点。
我没有完全得到你的第二个选项的“tesselation”部分,但是如果你的图元是一个多边形并且你的切割是直线,那么在切割之后很容易计算出2个多边形。事实上,OpenGL中的视口剪切例程始终如此,并且有很多文献,例如http://en.wikipedia.org/wiki/Sutherland-Hodgman
从长远来看,在可视化之前首先构建应用程序中发生的事情的(非可视)模型通常会更好。