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

Вниз

Перспектива...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.021 c
3-75127
r900
2003-11-28 11:16
2003.12.23
Запись в поле таблицы?


3-75086
Прямой
2003-11-30 03:21
2003.12.23
Мастера, помогите переступить через грабли с XML


1-75160
unknown
2003-12-10 01:10
2003.12.23
VCL Components


14-75392
smu
2003-11-28 08:29
2003.12.23
Надежно ли PGP шифрование?


1-75254
ShadowSmart
2003-12-10 13:49
2003.12.23
Приоритет потока, загрузка процессора