private uint[] GenerateIndexes(int partCount)
{
var indexes = new uint[3 * (3 * (1 + (partCount + 1) + 1))];
int index = 0;
// x axis
indexes[index++] = 0;
for (uint i = 0; i < (partCount + 1); i++)
{
indexes[index++] = (uint)(i % partCount + 1);
}
indexes[index++] = uint.MaxValue;// seprate triangle fans.
indexes[index++] = (uint)(1 + partCount);
for (uint i = 0; i < (partCount + 1); i++)
{
indexes[index++] = (uint)(i % partCount + 1 + (1 + partCount));
}
indexes[index++] = uint.MaxValue;// seprate triangle fans.
indexes[index++] = (uint)((3 + 2 * partCount - 1));
for (uint i = 0; i < (partCount + 1); i++)
{
indexes[index++] = (uint)(i % partCount + 1 + (1 + partCount));
}
indexes[index++] = uint.MaxValue;// seprate triangle fans.
// y axis
for (uint i = 0; i < 3 * (1 + (partCount + 1) + 1); i++)
{
uint value = indexes[i];
if (value == uint.MaxValue)
{ indexes[index++] = uint.MaxValue; }
else
{ indexes[index++] = (uint)(value + 3 + 2 * partCount); }
}
// z axis
for (uint i = 0; i < 3 * (1 + (partCount + 1) + 1); i++)
{
uint value = indexes[i];
if (value == uint.MaxValue)
{ indexes[index++] = uint.MaxValue; }
else
{ indexes[index++] = (uint)(value + 3 + 2 * partCount + 3 + 2 * partCount); }
}
return indexes;
}