我试图通过实现类似于Mikola(http://0fps.net/2012/06/30/meshing-in-a-minecraft-game/)
的贪婪网格划分算法来减少在体素引擎中渲染的面数由于我使用VBO为每个立方体绘制每个三角形,我想知道如何合并相邻立方体的三角形?
这里的参考是我的立方体顶点数组的样子(注意它是交错的,以允许包含纹理坐标):
GLfloat cubeInterleaved[] =
{
// Front face u v
-0.5f, -0.5f, 0.5f, 0, 0,
0.5f, -0.5f, 0.5f, 1, 0,
0.5f, 0.5f, 0.5f, 1, 1,
-0.5f, 0.5f, 0.5f, 0, 1,
// Right face
0.5f, -0.5f, 0.5f, 0, 0,
0.5f, -0.5f, -0.5f, 1, 0,
0.5f, 0.5f, -0.5f, 1, 1,
0.5f, 0.5f, 0.5f, 0, 1,
// Back face
0.5f, -0.5f, -0.5f, 0, 0,
-0.5f, -0.5f, -0.5f, 1, 0,
-0.5f, 0.5f, -0.5f, 1, 1,
0.5f, 0.5f, -0.5f, 0, 1,
// Left face
-0.5f, -0.5f, -0.5f, 0, 0,
-0.5f, -0.5f, 0.5f, 1, 0,
-0.5f, 0.5f, 0.5f, 1, 1,
-0.5f, 0.5f, -0.5f, 0, 1,
// Top Face
-0.5f, 0.5f, 0.5f, 0, 0,
0.5f, 0.5f, 0.5f, 1, 0,
0.5f, 0.5f, -0.5f, 1, 1,
-0.5f, 0.5f, -0.5f, 0, 1,
// Bottom Face
0.5f, -0.5f, 0.5f, 0, 0,
-0.5f, -0.5f, 0.5f, 1, 0,
-0.5f, -0.5f, -0.5f, 1, 1,
0.5f, -0.5f, -0.5f, 0, 1
};
答案 0 :(得分:1)
由于我使用VBO为每个立方体绘制每个三角形,我对如何合并相邻立方体的三角形感到困惑。
仅使用顶点的子集,这是通过正确填充索引缓冲区进行绘制来完成的。
以这组4个三角形为例
5
/ \
3 --- 4
/ \ / \
0 --- 1 --- 2
你可以画
GL_TRIANGLES: 0 1 3 1 2 4 1 4 3 3 4 5
或者如果所有顶点都是共面的,则可以使用外边
GL_TRIANGLES: 0 1 5
通过适当填充传递给glDrawElements