Форум: "Игры";
Текущий архив: 2006.03.26;
Скачать: [xml.tar.bz2];
Внизладшафт в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.039 c