Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ладшафт в OpenGL


RzCoDer ©   (2005-09-09 12:11:00) 

Есть ладшавфт (сосотоит из отдельных квадратов связаных вершинами по массиву) z координата у каждого разная, так вот, как определить уровень спрайта по z, причём не на вершине квадрата а в случайном месте?


OSokin   (2005-09-19 13:23:00) [1]

Кефир87 ©   (16.09.05 21:13) [12]
Они бы еще в целях оптимизации на асме написали


Кефир87   (2005-09-16 21:13:00) [2]


> по Abs поставить и не париться

Дык тут все в оптимизацию ударились...


OSokin   (2005-09-16 14:42:00) [3]

NE_Parovoz ©   (15.09.05 19:23) [10]
по Abs поставить и не париться


NE_Parovoz   (2005-09-15 19:23:00) [4]

XProger, никакого предрасчёта, и не одного деления ::)
а MAP_SCALE добавит 2 умножения.

function TrHeight(X,Y:GLfloat):GLfloat;
var
Xm,Ym:GLfloat;
Xt,Yt:GLint;  
begin
 Xt:=trunc(X);
 Yt:=trunc(Y);
 Xm:=X-Xt;
 Ym:=Y-Yt;
if Xm<=Ym then begin
 result:=Terrain.Matrix[Xt,Yt]
 +Ym*(Terrain.Matrix[Xt,Yt+1]-Terrain.Matrix[Xt,Yt])
 +Xm*(Terrain.Matrix[Xt+1,Yt+1]-Terrain.Matrix[Xt,Yt+1]);
end else begin
 result:=Terrain.Matrix[Xt,Yt]
 +Ym*(Terrain.Matrix[Xt+1,Yt+1]-Terrain.Matrix[Xt+1,Yt])
 +Xm*(Terrain.Matrix[Xt+1,Yt]-Terrain.Matrix[Xt,Yt]);
end;
end;

З.Ы. не работает с отрицательными X, Y


XProger   (2005-09-15 18:04:00) [5]

Кефир87, рановато ты меня в деды :)


Кефир87   (2005-09-14 23:55:00) [6]


> И работает значительно шустрее кифировского, т.к. здесь
> имеется предрасчёт :)

Это дедовщина! не поддавайтесь на правокации 8)


OSokin   (2005-09-14 20:12:00) [7]

У меня тема тут где-то валялась, там исходник есть


XProger   (2005-09-14 19:49:00) [8]

Ricks, Pos.Y - was ist das по-твоему? ;)))
И работает значительно шустрее кифировского, т.к. здесь имеется предрасчёт :)


Ricks   (2005-09-14 02:15:00) [9]

Смотри мой вопрос "Нахождение высоты в заданной точке" - Кефир87 мне помог и действительно РАБОТАЕТ!


Zer0   (2005-09-14 01:31:00) [10]

[3] A22
страна должна знать своих героев :)


A22   (2005-09-09 15:04:00) [11]

// Код из XTropper ( http://XProger.mirgames.ru)

:)))


XProger   (2005-09-09 14:47:00) [12]

Предварительно расчитать уравнение плосостей всех треугольников ландшафта, затем высчитывать z (y)


// Код из XTropper ( http://XProger.mirgames.ru)
function TMap.Collision(var Pos: TVector): integer;
var
j : integer;
begin
j := (trunc(Pos.Z) div MAP_SCALE * (W - 2) + trunc(Pos.X) div MAP_SCALE) * 2;
with Vertex[Face[j][0]] do
if (Vertex[Face[j][1]].X - X) * (Pos.Z - Z) - (Vertex[Face[j][1]].Z - Z) * (Pos.X - X) >= 0 then
 j := j + 1;
with Plane[j].Normal do
Pos.Y := (- X * Pos.X - Z * Pos.Z - Plane[j].D)/Y;
Result := j;
end;

Plane - предварительно расчитанные плоскости полигонов
j - номер полигона в массиве
MAP_SCALE - расстояние между вершинами в мировой системе координат.


A22   (2005-09-09 13:44:00) [13]

найти треугольник, на который попадает спрайт (или квадрат - смотря что за структура в в памяти хранится), проинтерполировать значения вершин


Наверх

Титульная страница Поиск, карта сайта Написать письмо