Правельная перерисовка объектов

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Юный Прогер
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.04.2006 (Пн) 8:55

Правельная перерисовка объектов

Сообщение Юный Прогер » 03.04.2006 (Пн) 9:22

Я сейчас пишу изометрическую стратегию. Все вроде было хорошо, но столкнулся с такой проблемой :x : у меня объекты (здания) не правильно рисуются. То есть нужно чтобы ближние дома закрывали дальние, высокие закрывали низкие и все в этом духе.
У меня куча массивов со всевозможной информацией об объектах: ширина, высота, длина зданий в игровых координатах, их местоположение, какие тайлы он занимает и т.д. То есть отследить где находится объект не проблема, но я не как не могу придумать алгоритм, который отрисовывал бы дома в правильной последовательности :( :( .
Кто знает подскажите как, или подскажите ссылку на нужный ресурс.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 03.04.2006 (Пн) 13:03

Юный Прогер
Может проще включить ZBuffer?
А так - простая сортировка по удаленности, но для объектов сложной формы может работать некорректно, ZBuffer лучше.

Юный Прогер
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.04.2006 (Пн) 8:55

Сообщение Юный Прогер » 05.04.2006 (Ср) 8:16

Да проблема в том, что я в DirectDraw создаю игру.
Можно про сортировку по удаленности по подробнее.

Юный Прогер
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.04.2006 (Пн) 8:55

Сообщение Юный Прогер » 06.04.2006 (Чт) 8:13

Что неужели никто не знает?
Ведь любой кто делал что-нибуть подобное должен был сталкиваться с такой проблемой. Раскажите кто как ее решал. :?:

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 06.04.2006 (Чт) 9:47

Юный Прогер
Множество методов сортировки есть в любом учебнике для начинающих. Примерно:
Создаешь массив с индексами для всех объектов, подлежащих сортировке.
Сортируешь индексы в массиве в соответствие с удаленностью объектов.
Выводишь объекты в соответствие с порядком индексов в массиве.

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 06.04.2006 (Чт) 20:59

Mikle, вот человеку мозги запутал....

Юный Прогер, в изометрических играх есть такое правило - чем ниже объект на экране - тем он ближе к камере. Отсюда следует, что объекты рисуются сверху вниз, то есть самый нижний объект рисуется последним. При этом координатой Y считается не верхняя граница спрайта, а нижняя.
ХЎ

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.04.2006 (Пт) 8:53

d3drm
Ну, если на ландшафте без гор и без летающих спрайтов - тогда сойдет и так :)

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Re: Правельная перерисовка объектов

Сообщение d3drm » 07.04.2006 (Пт) 20:47

Mikle, :wink:

Юный Прогер писал(а):...но я не как не могу придумать алгоритм, который отрисовывал бы дома в правильной последовательности :( :( .
ХЎ

Юный Прогер
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.04.2006 (Пн) 8:55

Сообщение Юный Прогер » 08.04.2006 (Сб) 2:35

d3drm а разве координату X учитывать не надо? Вдруг получиться так что у двух домов Y-ки совпадают.
Вообще как я понимаю нужно рисовать дома сверху вниз и слева направо. Но как это сделать я до сих пор не понял.

Wild VB Code for Food
Постоялец
Постоялец
 
Сообщения: 387
Зарегистрирован: 16.06.2005 (Чт) 17:34
Откуда: ты, друг? =)) Сообщений: 1234

Сообщение Wild VB Code for Food » 08.04.2006 (Сб) 5:30

Правельная перерисовка
:)

токае чуство что кто-то баянит, и есть подозрения на d3drm :) Посты набивает. :) Я прав?

Юный Прогер
'
Код: Выделить всё
Type TCoord
  X as double
  Y as double
  iZ as integer
End type

Type THouse
id as integer
pos as TCoord
'добавь здесь свои свойства
'типа кол-во жизней у здания e.t.c
End type

Dim Houses(100) as THouse


а потом рендери с зная zbuffer.

ЗЫ. Это я всё написал для того чтобы было легче читаить из файлов мапы, или такого у тебя нет и ты делаешь ручками? :roll: :wink:

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 10.04.2006 (Пн) 21:31

Wild VB Code for Food писал(а):токае чуство


ф зуп нагой тибе.


почитал бы, про z-buffer тут уже обсуждалось, его нет.
ХЎ

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 12.04.2006 (Ср) 0:24

Вообще как я понимаю нужно рисовать дома сверху вниз и слева направо. Но как это сделать я до сих пор не понял.

Поконкретнее можно? :) В чем проблема? Отсортровать массив? Или что?
То, что для одних константа, для других только переменная...

Юный Прогер
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.04.2006 (Пн) 8:55

Сообщение Юный Прогер » 12.04.2006 (Ср) 6:53

В чем проблема? Отсортровать массив? Или что?


Да нужно просто отсортировать массив, чтобы дома рисовались в правильной последовательности :) .
Т. е. если дом №1 закрывает (частично или полностью) дом №2, то нужно сначала нарисовать дом №2, а затем дом №1. Соответственно, в массиве, по которому дома отрисовываются, сначала должен стоять указатель на дом №2, следом за ним №1.
Это если дома два, если их больше отследить кто кого закрывает, и когда кого рисовать довольно сложно (по крайней мере для меня :) ) Вот я и спрашиваю, какие есть идеи? [/quote]

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 12.04.2006 (Ср) 7:24

Юный Прогер
Есть хороший способ решить проблему: читать ответы на собственный вопрос...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 12.04.2006 (Ср) 12:33

Идеи все тебе сказали уже выше. А именно: рисовать слева-направо, сверху вниз. О том, как сортируються массивы - в поиск куда угодно :) Алгоритмов куча, найти - 5 минут. Разобраться - минут 15. Выводы делай сам ;)
То, что для одних константа, для других только переменная...

Юный Прогер
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.04.2006 (Пн) 8:55

Сообщение Юный Прогер » 13.04.2006 (Чт) 7:32

Odrick
Идеи все тебе сказали уже выше. А именно: рисовать слева-направо, сверху вниз

НУ эту идею я сам высказал. А насчет ссылок, если тебе не сложно может подскажишь?

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 13.04.2006 (Чт) 12:21

То, что для одних константа, для других только переменная...


Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

    TopList