Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
ОлегЪ ©   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.04 c
8-1098638844
aladdin
2004-10-24 21:27
2005.02.06
Видео плеер


1-1106496290
GanibalLector
2005-01-23 19:04
2005.02.06
ООП


1-1106685428
SergP
2005-01-25 23:37
2005.02.06
MDI и Меню


1-1106220131
BVV
2005-01-20 14:22
2005.02.06
Атрибуты


4-1103487107
Stalker_
2004-12-19 23:11
2005.02.06
Автозагрузка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский