我已经看到很多方法来声明空间中立方体的顶点。有些代码声明了36个顶点,其他一些只有8个,就像那样:
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)
};
看起来你只画了两张脸然后填满了洞。 这似乎更好,所以我节省了宝贵的字节。 那是对的吗?我应该在indices数组中指定什么顺序?
--- EDIT 好的,我知道了。这应该是声明顶点的顺序,对吧?但我的立方体在某些面上有错误的三角形。
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
};
答案 0 :(得分:1)
是的,没错。一旦定义了前后面(近处和远处)的顶点,就可以获得构建立方体所需的所有信息。其他任何事情都是多余的,浪费内存。
您唯一需要注意的是:当您实际使用顶点构建多维数据集时顺序重要。
默认情况下,opengl要求逆时针提供顶点。我相信你可以覆盖这种行为,但我花了很多时间试图弄清楚我认为编码错误的结果是顶点排序错误。只要你记得总是以逆时针方式构造顶点(从立方体的外部看),渲染应该可以正常工作。