ЛОДы непонятки с индексами.

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

ЛОДы непонятки с индексами.

Сообщение DirectXManiac » 02.12.2010 (Чт) 12:30

Всем привет! Вот реанимировал свой ландшафт с ЛОДами на новом компе он почему то работает некорректно. Раньше на старом GeForce 8400 он нормально работал и все рисовалось правильно, сейчас на Radeon 4x серии он че то не правильно отображается.
Опишу ситуацию - индексных буфферов 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 :)
Подскажите может кто сталкивался.
#define ROFL 0xDDDD

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: ЛОДы непонятки с индексами.

Сообщение DirectXManiac » 06.12.2010 (Пн) 0:00

Разобрался. Проблема была в передаче параметров DrawIndexedPrimitve. Передавал не число вершин, а число индексов, а как мне объяснили карты NVIDIA и ATI по разному реагируют. DXDebug рулит :)
Вообщем на данном этапе получилось следующее: ландшафт с динамическими ЛОД и проверкой видимости. Все это вошло в класс сцены, который организовывает мир с помощью квадродерева. Автоматом получили проверку видимости для ландшафта и всех объектов, находящихся на нем. Скорость приемлимая, квадродерево конечно рекурсивным спуском не очень правильно, но пока достаточно. Дальше буду прикручивать текстурирование(на шейдерах это просто, тем более HLSL :) ).
Сейчас это выглядит так:
Код: Выделить всё
ETerrain* terrain = scene->CreatePlaneTerrain(256); //Создаем плоский ландшафт
terrain->EnableDynamicLOD(true);
...
...
//Рисование
scene->WorldUpdate(); //Камера, матрицы, проверка видимости
scene->WorldRender(); //Рисуем квадродерево

Внутри сцены происходит добавление в дерево ландшафта.
#define ROFL 0xDDDD

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: ЛОДы непонятки с индексами.

Сообщение Mikle » 06.12.2010 (Пн) 10:45

Интересно было бы посмотреть на демку, особенно на швы между ЛОДами.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: ЛОДы непонятки с индексами.

Сообщение DirectXManiac » 06.12.2010 (Пн) 17:11

Вот пока 2 скрина. Специально заснял Wireframe показать швы + водичка на втором скрине. Демка старая, сейчас уже квадродерево, водичку сделаю потом...
lod.png

Вот ЛОДы
water.png

А вот и водичка, правда освещение яркое сильно...

P.S. FPS такой потому что вертикальная синхронизация :wink:
У вас нет доступа для просмотра вложений в этом сообщении.
#define ROFL 0xDDDD

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: ЛОДы непонятки с индексами.

Сообщение DirectXManiac » 15.12.2010 (Ср) 17:07

Вот пример. Пока что лажа с выбором ЛОДа. Незнаю где, раньше нормально работало, собрался переделывать на clipmaps, но пока не дошли руки. Вот пока пример. Компилил на 2010 студии :)
Added:
Изменил файл - вот доделал, повысил кол-во возможных ЛОДов, размер ландшафта сделал больше, исправил баг с выбором ЛОДа.
У вас нет доступа для просмотра вложений в этом сообщении.
#define ROFL 0xDDDD


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList