Следующий код генерирует цилиндры, которые следуют по пути, без какой-либо ориентации, как это происходит позже. Вершины должны быть хорошими, но индексы не работают, почему это может быть? (Я оставил раздел вершин, чтобы вы могли видеть, как он связан)
// Consts
const float nSlices = 5;
const float fRadius = 0.2f;
const int nVPerNode = nSlices;
const int nIPerNode = nSlices * 6;
const int nSegments = m_vNodes.size();
const int nVertices = nSegments * nVPerNode;
const int nIndices = (nSegments - 1) * nIPerNode;
// Vertex Allocation
std::vector<cex::CEVertex> pVertices;
pVertices.resize(nVertices);
_UNTIL(j, m_vNodes.size())
{
// Segment offset
int nOffset = j * nVPerNode;
// Starting Point
D3DXVECTOR3 vStart = m_vNodes[j];
// Get Incremental Data
float a = 0.0f; float step = M_TWOPI / (float)nSlices;
// All sides
_UNTIL(i, nSlices)
{
float x = cos(a) * fRadius;
float y = sin(a) * fRadius;
// Set Vertex Position
pVertices[i + nOffset].Position = D3DXVECTOR3(x, y, 0) + vStart;
// Increment Step
a += step;
}
}
// Indices Allocation
cex::CEVector<UINT> pIndices;
pIndices.StepReset();
pIndices.resize(nIndices);
// Fill Index Buffer
_UNTIL(j, m_vNodes.size() - 1)
{
int nVOffset = j * nVPerNode;
int nIOffset = j * nIPerNode;
_UNTIL(i, nSlices - 1)
{
int base = nVOffset + i,
next = base + nVPerNode;
pIndices.Step(base + 0);
pIndices.Step(next + 0);
pIndices.Step(next + 1);
pIndices.Step(base + 0);
pIndices.Step(base + 1);
pIndices.Step(next + 1);
}
}
Задача ещё не решена.