退化顶点和GL_LINE_STRIP

时间:2012-03-13 14:00:40

标签: ios opengl-es cocos2d-iphone 2d mesh

我在iOS 5.1上

我试图在同一个顶点数组中显示几批线,我想用退化顶点将它们分开。但它似乎没有用。我在每批顶点之间画线。

谷歌搜索问题给我的结果,退化的顶点与GL_LINE_STRIP不兼容,但我不是很确定。有人可以证实吗?还有什么替代方案?

3 个答案:

答案 0 :(得分:2)

据我所知,您只能使用单个顶点数组和GL_LINE_STRIP绘制连续线。另一种方法是使用GL_LINES,它将每个顶点对视为一个独立的线段。要获得连续的线,请将前一个线段的最后一个顶点复制为顶点数组中下一个线段的起点。

答案 1 :(得分:2)

你可能想到的一种可能性是使用带有一些奇怪值的顶点(如无穷大或0的aw),但那些很可能只是在一些疯狂的距离处被渲染为正常点(因此你得到奇怪的剪裁线)。所以这通常不会奏效。

绘制三角形条时,可以使用退化三角形重新启动条带。这通过复制顶点(或更好的两个连续的顶点)来工作,然后生成一个三角形(或更好的四个),它退化为一条线,因此面积为零(并且没有绘制)。但是让我们看一下线条。当在那里复制一个顶点时,你会得到一条退化为一个点的线(因此不会被绘制),但是一旦开始下一个线条时,你必须得到一个新的顶点,因为两个不同的顶点总是形成一个有效的线,你看到通过复制顶点你无法重新启动线条。

因此,没有真正的方法可以使用简并顶点将多个线条放入单个绘图调用中(尽管现代桌面GL有其他方法可以实现)。最好的想法可能是使用普通的线集(GL_LINES),正如 Drewsmits 所暗示的那样。好吧,你将使顶点的数量增加一倍(如果你的条带非常长),但是批处理的驱动程序开销越少,可能会增加额外的内存和复制开销。

答案 2 :(得分:2)

虽然您不能在线条中使用退化顶点,但您可以使用基本重启索引(通常是数字类型可能的最大索引值),在Direct3D用语中也称为条带切割索引。它可以使用glPrimitiveRestartIndex进行配置。