Опишу ситуацию - индексных буфферов 4 - на каждый уровень детализации... Строятся вот так:
- Код: Выделить всё
void ETerrain::fillIndexBuffer(IndexBuffer** buf,int lod) {
//Считаем сколько чего нужно
int step = 1 << (lod - 1);
int numIndex = (sizeOfBlock / step) * (sizeOfBlock / step) * 6;
int numTri = numIndex / 3;
int id = 0;
//Создаем массив индексов
short* index = new short[numIndex];
for(int j=0;j<sizeOfBlock;j+=step){
for(int i=0;i<sizeOfBlock;i+=step){
index[id+0] = (short)(i * (sizeOfBlock+1) + j);
index[id+1] = (short)((i+step) * (sizeOfBlock+1) + j );
index[id+2] = (short)((i) * (sizeOfBlock+1) + j + step);
index[id+3] = (short)((i+step) * (sizeOfBlock+1) + j);
index[id+4] = (short)((i+step) * (sizeOfBlock+1) + j + step);
index[id+5] = (short)((i) * (sizeOfBlock+1) + j + step);
id+=6;
};
};
//Создаем буффер(через указатель)
(*buf) = new IndexBuffer();
(*buf)->CreateBuffer(numIndex);
(*buf)->SetData(index,0,numIndex);
};
Думаю понятно каким образом получаем ЛОД - путем удаления промежуточных вершин.
Для lod < 3 все рисуется нормально. lod = 3 рисуется одна полоска, lod = 4 вообще ничего нет.
Вершины не меняются(за исключением фикса ошибок на стыках, но убирал фикс ничего не меняется). Вершин (sizeOfBlock + 1) ^ 2. Строяться также - сначала j цикл, потом i
Подскажите может кто сталкивался.