Я изучаю программирование opengl для учебных целей, и я использую openscenegraph обертка вокруг opengl.Треугольная полоса и 3d сетки
Моя первая цель - визуализировать 3d-сетку, в которой данные высоты хранятся в файле как матрица 2d. Первый вопрос: могу ли я использовать TRIANGLE_STRIP для рендеринга этой сетки, которая может иметь вогнутые или выпуклые зоны?
Второй вопрос: есть ли какой-то конкретный альгорит для рендеринга 3d-сеток (ландшафтов) для этой цели?
Я начал с очень простых данных сетки:
10 10 10 10 10
10 10 10 10 10
10 10 5 10 10
10 10 10 10 10
10 10 10 10 10
это очень простая высотой 5x5 сетка, но результат, используя triangle_strip является следовать:
, как и можно видеть, что есть экстра-строка, которую я не могу удалить из моего алгоритма triangle_Strip.
Код, который я использовал, является следующим (считайте его кодом с открытым кодом). в строках и столбцах vars (int) i хранит размеры сетки. data - это указатель osg::Vec3**
, в котором ранее я читал простые значения. m_rpTerrainData - это osg::ref_ptr<osg::Vec3Array>
, в котором я загружаю, в правильном порядке (как хочет triangle_strip) вершины.
for(x=0;x<rows;x++)
{
for(y=0;y<columns;y++)
{
if(x<rows-1 && y<columns-1){
this->m_rpTerrainData->push_back(data[x][y]);
this->m_rpTerrainData->push_back(data[x+1][y]);
}
/*degenerate triangle because we at last of a column*/
if(x<rows-1 && y==columns-1){
this->m_rpTerrainData->push_back(data[x][y]);
this->m_rpTerrainData->push_back(data[x+1][y]);
this->m_rpTerrainData->push_back(data[x+1][y]);
this->m_rpTerrainData->push_back(data[x+1][0]);
}
}
}
//drop last element
this->m_rpTerrainData->pop_back();
Показать код. –
Первый вопрос: Да. Второй: Что вы имеете в виду? Что должен делать алгоритм? Вы сделали какой-то прогресс в этой дополнительной строке? Ваш код выглядит правильно. Вы подтвердили, что дополнительная линия поступает из сетки, а не из какой-либо другой геометрии? Действительно ли это только одна строка, простирающаяся от (2,1) до (2,3)? Как это выглядит, когда вы используете x^2 + y^2 как функцию значения сетки? –
Doh, я просто понял, что дополнительная строка просто проистекает из вырожденных треугольников, которые вы вставляете в конце каждой строки. -.- –