这是我骰子的坐标部分(由骰子纹理覆盖的立方体)。 我在一些代码中看到可以省略指向相同位置的公共坐标?无论如何,我的形状变得混乱! 我该如何简化呢?
这是我的代码 - >立方角坐标,纹理坐标和顶点索引
final float pt2[] = new float[] {
0, 0, 0,
0, 1, 0,
1, 0, 0,
1, 1, 0,
0, 0, 1,
0, 1, 1,
1, 0, 1,
1, 1, 1,
1, 1, 1, /* 8 */
1, 1, 0,
0, 1, 0,
0, 1, 1,
1, 0, 1,
1, 0, 0,
0, 0, 0,
0, 0, 1,
0, 0, 1, /* 16 */
0, 1, 1,
1, 1, 1,
1, 0, 1,
1, 0, 0,
0, 0, 0,
0, 1, 0,
1, 1, 0 };
final float texture[] = new float[] {
1f, 0.66f,
0.66f, 0.66f,
0f,0.33f,
0.33f, 0.33f,
1f, 0.33f,
0.66f, 0.33f,
0.0f, 0.0f,
0.33f, 0f,
0.33f, 0f,
0.33f, 0.33f,
0.66f, 0.33f,
0.66f, 0f,
0.33f, 0.33f,
0.33f, 0.66f,
0.66f, 0.66f,
0.66f, 0.33f,
0.66f, 0f,
0.66f, 0.33f,
1f, 0.33f,
1f, 0f,
0f, 0.33f,
0f, 0.66f,
0.33f, 0.66f,
0.33f, 0.33f,
};
final byte[] vertexIndex = new byte[] {
6, 2, 3,7, //1
5, 1, 0, 4, //2
8,9,10, 11, //3
15, 14, 13,12, //4
20, 21,22, 23, //5
16, 19, 18, 17 }; //6
答案 0 :(得分:0)
是的,事实上你在这里要做的事情绝对是要走的路 - 只指定每个顶点一次。它不仅可以节省内存,还可以避免细微的视觉假象,其中2个或更多顶点(应该位于同一位置)不具有完全相同的浮点值。
以下是我从代码库和this DX教程的组合中获得的示例。
你正在为顶点坐标和纹理坐标使用单独的数据结构,而在这里它们都被卡在一起,但想法是一样的。
这里重要的一点是,顶点表中只有8个条目 - 正好是多维数据集中的顶点数 - 没有多余的。您可以在索引缓冲区中对同一个顶点进行多次引用,但这就是您想要的 - 重用相同的顶点条目。
struct MyVertex
{
float x, y, z;
float t, v;
};
// the cube corners, note that there are only 8 entries
// in table - no duplicates
MyVertex vx[] =
{
{ 0.0f, 0.0f, 0.0f, 0.0f,1.0f }, // one corner of the cube
{ 0.0f, 1.0f, 0.0f, 0.0f,0.0f },
{ 1.0f, 1.0f, 0.0f, 1.0f,0.0f },
{ 1.0f, 0.0f, 0.0f, 1.0f,1.0f },
{ 0.0f, 0.0f, 1.0f, 0.0f,0.0f },
{ 1.0f, 0.0f, 1.0f, 0.0f,1.0f },
{ 1.0f, 1.0f, 1.0f, 0.0f,0.0f },
{ 0.0f, 1.0f, 1.0f, 0.0f,1.0f }
};
// index buffer that points back into vx[]
short indexBuffer[] =
{
0,1,2, 2,3,0, // cube face 0 (2 tris here)
4,5,6, 6,7,4, // 1
0,3,5, 5,4,0, // 2
3,2,6, 6,5,3, // 3
2,1,7, 7,6,2, // 4
1,0,4, 4,7,1 // 5
};