Форум: "Игры";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
ВнизПерспектива... Найти похожие ветки
← →
X-RayMan (2003-06-01 20:03) [0]Народ, как спроектировать изображение на экран в перспективе? Я читал, что надо х- и у- координаты поделить на z-координату и умножить на расстояние до плоскости просмотра, но у меня так ничего не получается. А очень надо :).
Пишу на Паскале, но можете использовать термины Делфи (его я тоже знаю :-)
← →
neuro (2003-06-02 20:34) [1]а что получается вместо этого?
вообще, лучше с матрицами работай, тогда все получится =)
← →
Asteroid (2003-06-03 02:02) [2]Тебе много чего своего придется сделать...определить матрицу проекции на экран, разобраться с камерой, написать быстрое умножение матриц для 16-ти разрядного процессора с эмуляцией FPU :))
В общем, посмотри исходники D3DUtils.pas - работу с матрицами. Без них - никуда.
← →
X-RayMan (2003-06-03 12:57) [3]Блин, народ... Понятно, что я работаю с матрицами. Есть объект - он представлен массивом матриц координат (x,y,z,1). Я его каждую вершину умножаю на матрицу поворота:
| 1 0 0 0 |
| 0 c s 0 |
| 0 -s c 0 |
| 0 0 0 1 |
Где с - косинус, s - синус угла поворота вокруг оси x.
Теперь мне это надо вывести на экран. При паралельном проектировании, когда просто отсекаються z-координаты, выглядит все совсем не 3-х мерным.
Как это можно спроектировать, что бы оно выглядело 3-х мерным?
P.S.
-> Asteroid
Какая разница при поддержке сопра я умножаю матрицы или нет, если вопрос стоял в другом?
← →
neuro (2003-06-03 15:56) [4]Блин, проектировать тоже надо матрицами. Матрица проекции есть такая. Если очень надо могу написать общий вид, но будет тебе гораздо полезнее, если ты сам выведешь соотв. уравнения.
← →
Omar2002 (2003-06-03 16:51) [5]
x1:=trunc((1/2*x+y)/30);
y1:=trunc((-1/2*x+y)/30);
Перевод из экранных в 2,5 мерное пространство(изомерию)
vid1.Canvas.Draw(trunc(30*(x1-y1)),trunc(15*(x1+y1)),MyPicture);
а это вывод на tbitmap (vid1) , здесь 30 и 15 -половина ширины и высоты спрайта.
Там еще со смещениями разберешься. Подобная шнята валяется на http://fromko.narod.ru в Закачке "Экономика" (моего производства), там какраз используется етот метод.
← →
Alek Aaz (2003-06-03 17:04) [6]Во, держи... от сердца отрываю... месяц мля убил... а сколько бумаги извел - ужас!
Делал для сканера в игрухе. Он типа под наклоном должон работать.
Не шедевр, если хочешь формулы можешь доработать. Кажется лучше вместо тангенса косинус пихать (соответственно арктангенс заменить на арккосинус). Попробуй поменять. Но и так вроде правдоподобно получается. Использовал модуль Math.
Ось Y - от "глаза" в горизонт
Ось X - лево-право, вдоль горизонта
Ось Z - вверх-низ, перпендикулярно горизонта. Здесь пока не сделана. Но кажется должно быть аналогично X.
Число 512 - расстояние до проецируемой плоскости
Число 196 - расстояние от "пола"(плоскости XY) до "глаза"
Function coordX(x,y:real):integer;
Var i,j,y1,x1:integer;
f,k,l:real;
Begin
j:=0;
f:=ArcTan2(x,512+y);
j:=Round(512*Tan(f));
Result:=j;
End;
Function coordY(y:real):integer;
Var i,j,y1,x1:integer;
f,k,l:real;
Begin
j:=0;
l:=ArcTan2(512,196);
f:=ArcTan2(512+y,196);
k:=f-l;
j:=Round(512*Tan(k));
Result:=j;
End;
← →
X-RayMan (2003-06-03 22:14) [7]Спасибо, попробую!
← →
X-RayMan (2003-06-04 22:55) [8]Все, я его сделал :).
Если кому интересно, формулы:
x_perspective=screen_w/2+D*x/(z+D);
y_perspective=screen_h/2+D*y/(z+D);
Де
x_perspective - х-координата в перспективе
у_perspective - у-координата в перспективе
D - расстояние до плана просмотра
screen_w - ширина экрана
screen_h - высота экрана
x,y,z - координаты точки
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2003.12.23;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c