Текущий архив: 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.48 MB
Время: 0.048 c