Карта высот OpenGL

Я работаю над проектом для школы, и часть его составляла карту высот.

Мне удалось создать карту высот, как я и просил, но я надеялся получить немного больше кредита и сгладить всю поверхность. Вот изображение того, что у меня есть сейчас:

http://img.photobucket.com/albums/v222/shavus/hMap.png

Код, который я использовал для его создания, принимал входной файл .jpg, а затем использовал GL_TRIANGLE_STRIP для создания карты, которая у меня уже есть.

Код, который я использовал:

glBegin(GL_TRIANGLE_STRIP);
       for(int i = 1; i <= sourceImage->ny; i++)
       {
               for(int j = 1; j <= sourceImage->nx; j++)
               {
                       // Define Color for the Vertex
                       int red = PIC_PIXEL(sourceImage , j, i, 0);                // Find RGB value for each pixel
                       int green = PIC_PIXEL(sourceImage , j, i, 1);
                       int blue = PIC_PIXEL(sourceImage , j, i, 2);
                       float color = (float)(red + green + blue)/(3.0*255.0);

                       // Define Position for the Vertex
                       float xPos = (-1.0 + 2.0*((float)j/(float)sourceImage->nx)) * boxSize;
                       float yPos = (-1.0 + 2.0*((float)i/(float)sourceImage->ny)) * boxSize;
                       float height = (-boxSize + 2*((red + green + blue) / (3.0 * 255.0)));
                       glColor3f(color, color, color);
                       height = height * 0.5 * boxSize;
                       glVertex3f(xPos, yPos, height);
               }
       }
       glEnd(); 

Как я могу сделать эту гладкую поверхность, чтобы она выглядела примерно так?

http://zac-interactive.dk/blogimages/heightmap.jpg

Спасибо за любую помощь, которую вы можете предоставить!


person user416516    schedule 19.09.2010    source источник
comment
Первая гиперссылка не работает.   -  person tafa    schedule 20.09.2010
comment
под сглаживанием поверхности вы подразумеваете разделение сетки? и как он выглядит до сглаживания? Обычный подход к рендерингу карт высот состоит в том, чтобы иметь предопределенную 2D-сетку вершин (например, с z = 0) и устанавливать высоту (в данном случае z-координату) в соответствии со значением, вычисленным в другом месте — в картах смещения создаются карты высот. например из диффузных карт, преобразованных в шкалу серого.   -  person erjot    schedule 20.09.2010
comment
вторая гиперссылка не работает.   -  person drewish    schedule 03.12.2014


Ответы (1)


Самый простой способ избавиться от внезапных изменений высот на вашей карте высот и, таким образом, сделать ее более плавной — это применить к ней фильтр свертки.

Вот ссылка:

http://www.gamedev.net/reference/articles/article2164.asp

при выполнении фильтра коробки. Это не лучший фильтр, который вы можете использовать, но он будет иметь большое значение.

person Jose    schedule 20.09.2010
comment
Существует множество фильтров, которые снижают количество деталей, но улучшают плавность. И это легко. - person przemo_li; 12.08.2011