Форум: "Игры";
Текущий архив: 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