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

Вниз

ладшафт в OpenGL   Найти похожие ветки 

 
RzCoDer ©   (2005-09-09 12:11) [0]

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


 
A22 ©   (2005-09-09 13:44) [1]

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


 
XProger ©   (2005-09-09 14:47) [2]

Предварительно расчитать уравнение плосостей всех треугольников ландшафта, затем высчитывать 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 15:04) [3]

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

:)))


 
Zer0 ©   (2005-09-14 01:31) [4]

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


 
Ricks ©   (2005-09-14 02:15) [5]

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


 
XProger ©   (2005-09-14 19:49) [6]

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


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

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


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


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

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


 
XProger ©   (2005-09-15 18:04) [9]

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


 
NE_Parovoz ©   (2005-09-15 19:23) [10]

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


 
OSokin ©   (2005-09-16 14:42) [11]

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


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


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

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


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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.054 c
3-1138357869
Ivanov Sergey
2006-01-27 13:31
2006.03.26
Что не так в запросе?


2-1142317624
chapchaps
2006-03-14 09:27
2006.03.26
Дельфи


3-1138697727
Ткаченко Сергей
2006-01-31 11:55
2006.03.26
получать в запросе новые поля, полученные из существующих???


2-1141542433
Silica
2006-03-05 10:07
2006.03.26
Написанную в паскале....


2-1141913478
Новочеркасский Волк
2006-03-09 17:11
2006.03.26
Интересные компоненты.