我见过很多方法来声明空间中立方体的顶点。有些代码申报36个顶点,其他一些只有八,这样的:最佳做法 - 声明操作2.0立方体顶点
private float vertices[] = {
-1.0f, -1.0f, -1.0f, //p1 lower left far plane (0)
1.0f, -1.0f, -1.0f, //p2 lower right far plane (1)
1.0f, 1.0f, -1.0f, //p3 top right far plane (2)
-1.0f, 1.0f, -1.0f, //p4 top left far plane (3)
-1.0f, -1.0f, 1.0f, //p5 lower left near plane (4)
1.0f, -1.0f, 1.0f, //p6 lower right near plane (5)
1.0f, 1.0f, 1.0f, //p7 top right near plane (6)
-1.0f, 1.0f, 1.0f //p8 top left near plane (7)
};
它看起来像您刚才绘制的两个面,然后填洞。 这似乎是可取的,所以我保存了宝贵的字节。 这是正确的吗?我应该在索引数组中指定什么顺序?
---编辑 好吧,我明白了。这应该是声明顶点的顺序吧?但是我的立方体在某些面上有错误的三角形。
private short order[] = {
0, 4, 5, 0, 5, 1, //bottom face
1, 5, 6, 1, 6, 2, //right face
2, 6, 7, 2, 7, 3, // top face
3, 7, 4, 3, 4, 0, // left face
4, 7, 6, 4, 6, 5, // front face
3, 0, 1, 3, 1, 2 // back face
};
某些解决方案可能使用多于8个顶点的原因是每个立方体面都需要唯一的颜色/法线。如果没有平面着色+挑动顶点,共享顶点将导致每个面的颜色/法线被平均。 –