![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ладшафт в 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]найти треугольник, на который попадает спрайт (или квадрат - смотря что за структура в в памяти хранится), проинтерполировать значения вершин