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

Вниз

Ой изо-математика   Найти похожие ветки 

 
D.Z.   (2004-11-23 01:33) [0]

Спасайте!
Столько времени на ету гадость убил !
Перепробовал многие варианты, но увы ничего хорошего, а нужно лиш
две формулки перевода X,Y в изометрические-> X,Y без лишнего, всяких там смещений и тд.
Это как нетрудно догадаться для карты из изо-тайлов, размеры тайла 64x32.


 
П7   (2004-11-23 02:17) [1]

Junk Studio тебя спасёт. (:
Вместе с рамблером...

Почему-то мне кажется, что ты нифига на эту гадость не убивал... Т.к. в сети инфы валом.


 
cyborg ©   (2004-11-23 09:34) [2]

Чётные строки тайлов смещай на половину ширины вправо и выводи или наоборот, как больше нравится.


 
D.Z.   (2004-11-23 10:41) [3]

Вот кстати в рамблере,яндексе и тд. искал и много нашол да вот только ничего хорошего, например вот:
Tx:=(((X+mapX)-32)+2*(Y+mapY))div 64;
Ty:=(2*(X+mapY)-((X+mapX)-32))div 64;
недостатки вопервых,увеличить или уменьшить mapx или mapy можно
только на чётное число(карта будет прыгать), вовторых эти формулы дают в системме координат два нуля это влияет на результат при
переводе обратно в экранные. Могу привести ещё парочку "кислых"
формул но если в этом необходимость?
Ув. cyborg у меня не в этом проблемма, а в см.выше.


 
П7   (2004-11-23 11:24) [4]

А нафиг тебе непосредственно переводить координаты? Работу с палитрой никто ещё не отменял... + копай в сторону трёхмерщины. Не АПИ и принципы.
В общем поподробнее свою проблему опиши.


 
D.Z.   (2004-11-23 13:15) [5]

Так описываю.
Делаю изометрический движок,есть функция вывода ромбических тайлов, ну заполнение экрана ими, сначала чётные потом нечётные.
Предпологается что карта местности будет большая где-то
30000x30000 тайлов. Вывод естественно осуществляется не всей карты,а только то что помещается в экран вот кусок кода:

countH,countW количество тайлов по x,y экрана зависит от разрешения,
Wt,Ht размеры тайла,
vmpx<=Wt,vmpy<=Ht смещение для скроллинга карты,
sizex,sizey размер карты.

for y:=-2 to countH do
 for x:=-2 to countW do begin
  sx:=x*Wt+vmpx;
  sy:=y*Ht+vmpy;
  tx:=???? изо-координаты
  ty:=????
  if (tx>0)and(tx<=sizex)and(ty>0)and(ty<=sizey)then
  DrawTile(map[tx,ty],sx,sy, 1);
 end;

for y:=-2 to countH do
 for x:=-2 to countW do begin
  sx:=x*Wt+32+vmpx;
  sy:=y*Ht+16+vmpy;
  tx:=???? изо-координаты
  ty:=????
  if (tx>0)and(tx<=sizex)and(ty>0)and(ty<=sizey)then
  DrawTile(map[tx,ty],sx,sy, 1);
 end;
Надеюсь понятно, а проблемма вот в этих tx,ty!


 
Megabyte-ceercop ©   (2004-11-23 14:32) [6]


> D.Z.   (23.11.04 13:15) [5]

Смотри в чём ещё недостаток твоей процедуры отрисовки:
Тайлы у тебя ромбообразные, Соответственно отрисовываемая область будет большим ромбом. Если начнёш рисовать сопоставив верхнюю грань ромба с верхней гранью экрана, то внизу у тебя отрисовываемая область будет смещаться в угол.
Надо менять способ расчёта попадающих в экран тайлов.

А tx,ty - это я так понял индексы элемента карты а не координаты для вывода на экран.

Выщитывай эти ИНДЕКСЫ так:

tx:= vmpx+x;
ty:= vmpy+y;  //очень просто.

однако, как я уже сказал, основная проблема - правильный выбор области попадающей в экран.
Пробуй и пиши результат.


 
Mihey_temporary ©   (2004-11-23 20:32) [7]


> Делаю изометрический движок,есть функция вывода ромбических
> тайлов, ну заполнение экрана ими, сначала чётные потом нечётные.


Это ты на DelphiGFX прочитал? Брось, выводи по-человечески. Отсёт координат делай с левого верхнего угла квадратной карты, а не того, что на экране.


 
D.Z.   (2004-11-24 09:27) [8]

Координаты вывода на экран это sx,sy, а tx,ty это должны быть координаты тайловой карты, вот эти две формулы(сообщение[3])
нормально работают но недостатки я перечислил, всю карту я могу смещать переменными mapx,mapy и тем самым регулировать от куда начнётся отрисовка карты, и ещё нахождение tx,ty нужно для работы
мыши так же повторяю что немного переделав формулы(сообщение[3])
соответственно работает и мышь с возможностью выбора нужных
тайлов, вот видите как трудно найти реальные формулки,а приводя
примеры с различными алгоритмами ситуацию неизмениш, вот простенькая задачка для примера - перевести допустим координату
520,400 в изометрическую без всяких смещений по карте и начиная отсчет с верхнего левого угла прямоугольной карты.


 
ninja ©   (2004-11-24 12:11) [9]


> D.Z.   (24.11.04 09:27) [8]

блин, ну ты грузишь! каша какая-то.
Ты же вроде написал, что формулы в [3] работают? в чём проблема-то? Какая разница, со смещением считать, или из угла..


 
ninja ©   (2004-11-24 12:21) [10]


> D.Z.  

если хочешь, могу выслать те на мыло свой модуль. там по методу пододеяльника. работает корректно вроде, только для карт размера 1х1 что-то глючит, но это не смертельно наверно :)


 
D.Z.   (2004-11-24 14:33) [11]

ninja я негружу, а пытаюсь объяснить проблемму,а на счёт формул
так там [3] я перечислил недостатки этих формул но лудше если
хочеш проверь сам-лудше поймёш, а исходник вышли очень интересно будет посмотреть, а новых формул так и непоявилось:( может
их просто нет?


 
П7   (2004-11-25 07:19) [12]

почему все всегда делали без этого бреда, а ты вот чё-то придумал и пытаешься реализовать через задницу.
скачай десяток исходников и посмотри.



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.029 c
14-1106805884
Бугага
2005-01-27 09:04
2005.02.20
Скачать книги


3-1106634249
Arrows
2005-01-25 09:24
2005.02.20
Структура dbf файла


4-1104825364
Tomkat
2005-01-04 10:56
2005.02.20
Получить группу текущего пользователя


11-1091774698
Ricko
2004-08-06 10:44
2005.02.20
7 битная кодировка


1-1107426172
Styles
2005-02-03 13:22
2005.02.20
Убрать заголовок