Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-75185
BorisKb
2003-12-11 16:04
2003.12.23
Своя кнопка в заголовке окна.


1-75216
DeMoN-777
2003-12-11 02:06
2003.12.23
Определение раскладки


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


14-75312
Mike Kouzmine
2003-11-24 12:42
2003.12.23
Завтра, страшное дело сказать, что будет. Ваши мнения.


6-75300
Горох
2003-10-24 18:41
2003.12.23
IdUDPClient1.SendBuffer()





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский