Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

Генерация ландшафта   Найти похожие ветки 

 
ОлегЪ ©   (2004-11-04 21:38) [0]

Здравствуйте, мастера!
У меня никак не получается решить такую задачу. Допустим, имеется bmp-файл произвольных размеров. И нужно сгенерировать ландшафт и наложить текстуру на него. Это надо реализовать средствами OpenGL API. Я перекопал много ресурсов, в Сети, но так и нашёл то, что мне нужно. Много примеров на Си, а я как не старался конвертировать это в Delphi, но так ничего и не получилось :( Пробовал составлять свой алгоритм - у меня полусалось всё что угодно, но только не то, что я хотел :( Подскажите пожалуйста как это реализовать. Хотелось бы посмотреть на рабочий код (теоретический материалов я пересмотрел очень много, а вот как это делается на практике - таких материалов не было найдено).
Вы - моя последняя надежда!
Заранее благодарю. С уважением, Николаев Олег.


 
Колбасьев ©   (2004-11-04 22:07) [1]

Есть демка на эту тему на GameDev.ru -> раздел Samples (Примеры).

А вообще, когда мне надо было, я сам сделал. За вышену вершины треугольника в сетке брал обработанный цвет соответствующей точки в bmp.


 
ОлегЪ ©   (2004-11-04 23:19) [2]

Тот пример у меня не компилируется. Кроме того, я это пытаюсь сделать сам, но не знаю как... Ну помогите же!
На этом коде я остановился:
procedure TMainForm.Svat(FileName: String{; n : integer} );
var
 r, g, b: Real;
 i, j: integer;
 BitMap: TBitmap;
 BMPMap: Array[0..99, 0..49, 0..2] of GLUByte;
begin
 BitMap:= TBitMap.Create;
 BitMap.LoadFromFile(FileName);
 for i:=0 to 99 do
   for j :=0 to 49 do
   begin
     BmpMap[i, j, 0]:=GetRValue(BitMap.Canvas.Pixels[i, j]);
     BmpMap[i, j, 1]:=GetGValue(BitMap.Canvas.Pixels[i, j]);
     BmpMap[i, j, 2]:=GetBValue(BitMap.Canvas.Pixels[i, j]);
   end;
 for i:=0 to 99 do
   for j:=0 to 49 do
   begin
     R:=(BmpMap[i, j, 0])/255;
     G:=(BmpMap[i, j, 2])/255;
     B:=(BmpMap[i, j, 2])/255;
     glColor3f(R, G, B);
     glBegin(GL_POINTS);
       glVertex3f(i/255, j/255, r);
     glEnd;
   end;
end;

Но он рисует не треугольники а вершины. Помогите его доработать плиз.


 
ОлегЪ ©   (2004-11-05 10:08) [3]

И никто не поможет?


 
Shulkin   (2004-11-05 13:43) [4]

Ну типа так :
{------------------------------}
for i:=0 to Length-1 do {-Длина ландшафта-}
for j:=0 to Width-1 do {-Ширина ландшафта-}
 begin
     R:=(BmpMap[i, j, 0])/255;
     G:=(BmpMap[i, j, 1])/255; {-Здесь у тебя было 2, нужно 1-}
     B:=(BmpMap[i, j, 2])/255;
     glColor3f(R, G, B);
     Height := (R+G+B) / 3 ; {-Высота каждой вершин-}
     glBegin ( GL_TRIANGLES) ;
       glVertex3f ( i   , j   , Height ) ;
       glVertex3f ( i+1 , j   , Height ) ;
       glVertex3f ( i   , j+1 , Height ) ;

       glVertex3f ( i+1 , j+1 , Height ) ;
       glVertex3f ( i+1 , j   , Height ) ;
       glVertex3f ( i   , j+1 , Height ) ;
     glEnd ;
 end;
{------------------------------}

По идее должно работать.


 
ОлегЪ ©   (2004-11-05 16:06) [5]


> Shulkin

Огромное Вам спасибо!


 
Shulkin   (2004-11-06 11:47) [6]

Извини, парень, я ступил не по детски, лучше делать так :

{------------------------------}

Procedure SetHeightAndColor ( x , y : integer ) ;
begin
R:=(BmpMap[x, y, 0])/255;
G:=(BmpMap[x, y, 1])/255;
B:=(BmpMap[x, y, 2])/255;
glColor3f(R, G, B);
Height := (R+G+B) / 3 ;
end ;

for i:=0 to Length-1 do {-Длина ландшафта-}
for j:=0 to Width-1 do {-Ширина ландшафта-}
begin
    glBegin ( GL_TRIANGLES) ;
      SetHeightAndColor ( i,j ) ;
      glVertex3f ( i   , j   , Height ) ;
      SetHeightAndColor ( i+1,j ) ;
      glVertex3f ( i+1 , j   , Height ) ;
      SetHeightAndColor ( i,j+1 ) ;
      glVertex3f ( i   , j+1 , Height ) ;

      SetHeightAndColor ( i+1,j+1 ) ;
      glVertex3f ( i+1 , j+1 , Height ) ;
      SetHeightAndColor ( i+1,j ) ;
      glVertex3f ( i+1 , j   , Height ) ;
      SetHeightAndColor ( i,j+1 ) ;
      glVertex3f ( i   , j+1 , Height ) ;
    glEnd ;
end;
{------------------------------}

Да и вообще, заведи матрицу, где ячейка - (Color,Height,Normal
(вектор) и т.д), заполняй эту матрицу при загрузке, а потом
отрисовывай. Ландшафт без Smooth-нормалей - не ландшафт, а
если ты будешь эти нормали на каждом кадре расчитывать заново,
то FPS у тебя упадет ниже плинтуса.


 
П7   (2004-11-06 14:58) [7]

Какая разница, компилируется или нет... Кодто есть, посмотри, как умные дядьки делают и не изобретай велосипед...


 
ОлегЪ ©   (2004-11-06 17:12) [8]


> Shulkin

Ещё раз спасибо! Дело в том, что я пишу свой графический движок - а какой это движок без генерации ландшафтов... Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.041 c
1-1106271780
Viktop
2005-01-21 04:43
2005.02.06
Кодировка?


8-1098530146
ALEKCEY
2004-10-23 15:15
2005.02.06
Визуализации музыки и фракталы


1-1106565839
Aleks
2005-01-24 14:23
2005.02.06
String


14-1106144088
able
2005-01-19 17:14
2005.02.06
Подкскажите... насчет стали


1-1106430214
ser_max
2005-01-23 00:43
2005.02.06
Запись в файл