在处理过程中,只需按特定顺序给出顶点位置,即可轻松创建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的工作方式,但在我看来这似乎不是很有效,如果我错了请告诉我。
答案 0 :(得分:2)
您所描述的是在OpenGL 1.0中绘制顶点的原始方法。自1997年发布的OpenGL 1.1规范以来,已经有了更有效的方法。查看类似glDrawElements
的API调用,它允许您使用顶点索引。
答案 1 :(得分:0)
您想要的是Quad Strip原语。
您以特殊顺序提供顶点,它将重复使用构成相邻四边形的4个顶点中的2个。条带中顶点的正确顺序是每个奇数基元反向缠绕。条带设计用于连接几何体,如果要使用四边形条带绘制未连接的四边形,则必须执行称为“基本重启”的操作。
当然,在现代OpenGL中不推荐使用四边形;三角形支持相同的概念。事实上,单个非剥离四边形与填充相同区域的三角形条带具有相同的顶点顺序。
您还可以使用索引绘图,其中您通过ID引用每个基元的顶点。这需要额外存储索引数组,但它确实具有允许您在不是一系列连接基元的网格中重复使用顶点的附加好处。