Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Карта высот 
V
    Опции темы
sfok3
Дата 18.10.2009, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.7.2009

Репутация: нет
Всего: нет



Код
procedure CreateLandscape(d_:IDirect3DDevice9; var g_:IDirect3DVertexBuffer9;
                          c:TBitMap; h:single);
var row,col,rows,cols:integer;
begin
rows:=c.Width; 
cols:=c.Height; 
SetLength(dxH , rows-1, cols-1); 
SetLength(dxH_, rows-1, cols-1); 
SetLength(dzH , rows-1, cols-1); 
SetLength(dzH_, rows-1, cols-1); 
with c.Canvas do
 for col:=0 to cols-2 do 
  for row:=0  to  rows-2 do
   begin
    dxH [row,col]:=Pixels[row,   col  ]/h; 
    dxH_[row,col]:=Pixels[row+1, col  ]/h;
    dzH [row,col]:=Pixels[row,   col+1]/h;
    dzH_[row,col]:=Pixels[row+1, col+1]/h;
   end;
if FAILED(d_.CreateVertexBuffer((rows*5-5)*SizeOf(TVertex),0,
                                       D3DFVF_, D3DPOOL_DEFAULT, g_, nil)) then ShowMessage('y');
end;


Код
procedure DrawLandscape(d_:IDirect3DDevice9; g_:IDirect3DVertexBuffer9;
                        rows, cols:integer; step:single; xCam, zCam:single; r:integer);
var  v: ^TVertex;
     row,col: integer;
     r1,r2,r3,r4: integer;
     r5,r6,c5,c6: single;
     x,z: single;
     x1: single;
begin
z:=0;
x1:=r*step;
r1:=rows-2;
r2:=r1 div 2;
if r > r2 then r:=r2;
r3:=2*r;
r4:=r1;
for col:=0 to cols - 2 do
 begin
  c5:=col/cols;
  c6:=1/cols;
  if ((z > zCam - x1)and(z < zCam + x1))then
   begin
    for row:=0 to r1 do
     if row > (xCam - x1)/step then
      begin
       r4:=row;
       break;
      end;
    if r4 > r1 - r3 then r4:=r1 - r3;
    x:=r4 * step;
    g_.Lock(0, (r3*5-5) * SizeOf(TVertex), Pointer(v), 0);
    for row:=r4 to r4 + r3 do
     begin
      r5:=row/rows;
      r6:=1/rows;

      v.x:=x;                 v.y:=dxH [row,col];             v.z:= z;
      v.nx :=0;               v.ny :=1;                       v.nz :=0;
      v.c:=$FFFFFFFF;
      v.u:=r5;                v.v:=c5;
      inc(v);

      v.x:=x+step;            v.y:=dxH_[row,col];             v.z:= z;
      v.nx :=0;               v.ny :=1;                       v.nz :=0;
      v.c:=$FFFFFFFF;
      v.u:=r5+r6;             v.v:=c5;
      inc(v);

      v.x:=x;                 v.y:=dzH [row,col];             v.z:= z-step;
      v.nx :=0;               v.ny :=1;                       v.nz :=0;
      v.c:=$FFFFFFFF;
      v.u:=r5;                v.v:=c5+c6;
      inc(v);

      v.x:=x+step;            v.y:=dzH_[row,col];             v.z:= z-step;
      v.nx :=0;               v.ny :=1;                       v.nz :=0;
      v.c:=$FFFFFFFF;
      v.u:=r5+r6;             v.v:=c5+c6;
      inc(v);

      v.x:=x+step;            v.y:=dxH_[row,col];             v.z:= z;
      v.nx :=0;               v.ny :=1;                       v.nz :=0;
      v.c:=$FFFFFFFF;
      v.u:=r5+r6;             v.v:=c5;

      inc(v);
      x:=x + step;
     end;
    g_.Unlock;
    d_.SetStreamSource(0, g_, 0, SizeOf(TVertex));
    d_.SetFVF(D3DFVF_);
    d_.DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, (r3-2)*5-3);
   end;
  z:=z - step;
 end;
end;


Код
hBitMap:=TBitMap.Create;
s:=Sim_path + '\Models\HEIGHT.BMP';
if FileExists(s) then hBitMap.LoadFromfile(s)else Application.Terminate;
rows:=hBitMap.Width; cols:=hBitMap.Height;
step:=10; view:=32; delH:=80000;
CreateLandscape(g_pd3dDevice, gLand, hBitMap, delH);
********
DrawLandscape(g_pd3dDevice, gLand, rows, cols, step, xCam, zCam, view);


Нашел исходник построение массива по картинке и построение ландашафта по этому массиву, есть вопросы, буду рад если кто то объяснит:

SetLength(dzH_, rows-1, cols-1); //на единицу меньше так как массив начинается с 0
for col:=0 to cols-2 do //а вот тут не понятно почему на 2 уменьшаем
for row:=0  to  rows-2 do //а вот тут не понятно почему на 2 уменьшаем

собственно это вопрос только по переводу в массив (да и зачем их 4)... может быть у кого-нибудь есть нормальный пример, буду очень рад
PM MAIL   Вверх
~FoX~
Дата 18.10.2009, 07:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



Цитата(sfok3 @  18.10.2009,  01:26 Найти цитируемый пост)
SetLength(dzH_, rows-1, cols-1); //на единицу меньше так как массив начинается с 0

Потому что ноль тоже как ни странно цифра
[0..4] - 0, 1, 2, 3, 4....Количество элементов - 5, а последний индекс - 4....


Цитата(sfok3 @  18.10.2009,  01:26 Найти цитируемый пост)

for col:=0 to cols-2 do //а вот тут не понятно почему на 2 уменьшаем
for row:=0  to  rows-2 do //а вот тут не понятно почему на 2 уменьшаем

Потому что
Код

  dxH_[row,col]:=Pixels[row+1, col  ]/h; //row+1
  dzH [row,col]:=Pixels[row,   col+1]/h;  //col+1


Цитата(sfok3 @  18.10.2009,  01:26 Найти цитируемый пост)

да и зачем их 4

Кого четыре?  smile 

Это сообщение отредактировал(а) ~FoX~ - 18.10.2009, 07:02


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
sfok3
Дата 18.10.2009, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 14.7.2009

Репутация: нет
Всего: нет



SetLength(dxH , rows-1, cols-1); 
SetLength(dxH_, rows-1, cols-1); 
SetLength(dzH , rows-1, cols-1); 
SetLength(dzH_, rows-1, cols-1); 
четыре массива

Добавлено через 41 секунду
А может кто нибудь дать исходник где с одним массивом строится?

Добавлено через 41 секунду
А может кто нибудь дать исходник где с одним массивом строится?
PM MAIL   Вверх
~FoX~
Дата 19.10.2009, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 2
Всего: 68



sfok3, Мало данных, но скорее всего, это замороки ДХ, для буфера...

http://forum.vingrad.ru/forum/topic-58875/unread-1.html

Это сообщение отредактировал(а) ~FoX~ - 19.10.2009, 10:34


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0739 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.