在处理过程中,只需按一定顺序给出顶点位置,就可以很容易地创建3D形状。
一个简单正方形的例子:
beginShape();// QUAD would work as parameter
vertex(10,10);
vertex(20,10);
vertex(20,20);
vertex(10,20);
endShape();
我想知道的是,如果我想创建多个四边形,形成一个更大的正方形(即一些四边形共享角),我应该自己创建较小的四边形,从而创建重叠的顶点,还是有一种方法来定义顶点,然后我可以使用多个四边形,而无需在同一位置创建新的顶点?
的例子:
X:1, 2
+---+---+ Y:
| | |
| | | 1,
+---o---/
| | |
| | | 2
+---+---+
所有四边形共享的中间角(标记为'o')将有4个与所有相邻四边形重叠的顶点。最右边的中间顶点点(标记为'/')将有两个顶点与(2,1)和(2,2)处的四边形重叠
当涉及到vertexcount时,这不是很低效吗?这可能是OpenGL的工作方式,但在我看来,这似乎不是很有效,如果我错了,请告诉我。
你所描述的是在OpenGL 1.0中绘制顶点的原始方法。自从1997年发布的OpenGL 1.1规范以来,已经有了更有效的方法。查看API调用,如glDrawElements
,它允许您使用顶点索引。
你想要的就是所谓的Quad Strip原语。
你以一个特殊的顺序提供你的顶点,它将重用组成相邻四边形的4个顶点中的2个。条上顶点的正确顺序是使每个奇基元反向缠绕。条形图是为连通几何设计的,如果你想用一个四边形条形图画出不连通的四边形,你必须做一些叫做"原始重启"的事情。
当然,在现代OpenGL中不赞成使用quad;三角形支持同样的概念。事实上,一个未剥离的四边形与一个填充相同区域的三角形具有相同的顶点顺序。
您还可以使用索引绘制,其中您根据每个原语的ID引用顶点。这需要额外存储索引数组,但它确实有一个额外的好处,即允许您重用网格中的顶点,而不是一系列连接的原语。