2010-09-19 4 views
2

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

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

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

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

+0

Первая гиперссылка не работает. – tafa

+0

«сглаживая поверхность», вы имеете в виду подразделение сетки? и как он выглядит до сглаживания? нормальный подход для отображения карт высот должен иметь предопределенную 2D-сетку вершин (например, с z = 0) и задавать высоту (в данном случае z-координату) в соответствии со значением, вычисленным в другом месте, - в картах отображения высоты смещения создается например от диффузных карт, преобразованных в шкалу серого. – erjot

+1

Вторая гиперссылка не работает. – drewish

ответ

2

Легкий способ избавиться от внезапных изменений высоты в вашей карте высот и, таким образом, сделать ее более плавной - запустить над ней фильтр свертки.

Вот ссылка:

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

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

+0

Существует множество фильтров, которые снимут количество деталей, но улучшат «гладкость». И это легко. –

Смежные вопросы