Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / движущиеся объекты / 18 сообщений из 18, страница 1 из 1
09.05.2004, 02:30
    #32511639
omygut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
задача такая: необходимо нарисовать движущиеся объекты в окне, какждый объект рисуется в отдельном потоке.
если через BitBlt, то копируешь сначала то, что было в окне, затем рисуешь свой объект, но тогда не понятно как стирать его предыдущее отображение: если запоминать то, что было под объектом до его рисования, то это изображение мог изменить другой двигующийся объект
???
(может кто-то делал уже нечто подобное?)
...
Рейтинг: 0 / 0
09.05.2004, 09:32
    #32511656
Green2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
Эта проблема решается в программировании видеоигр.

Предлагаю такой вариант,
1) готовишь фон,
2) копируешь фон
3) наносишь на фон свой объект
4) выводишь готовое изображение
5) пункт 2
...
Рейтинг: 0 / 0
09.05.2004, 19:11
    #32511770
omygut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
не совсем понятно
можно поподробнее
...
Рейтинг: 0 / 0
09.05.2004, 21:34
    #32511799
Green2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
Готовить фон надо в внеэкранном изображении, например в ОЗУ, потом копируешь его в видеопамять, и там рисуешь движущиеся объекты.
То есть готовишь следующий кадр.

Для того, чтобы пользователь не видел, как рисуются объекты, надо использовать переключение страниц видеопамяти, таким образом новое изображение мгновенно окажеться на экране.
...
Рейтинг: 0 / 0
09.05.2004, 22:01
    #32511810
omygut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
здесь проблема еще в том, что каждый объект рисуется в своем отдельном потоке отдельно от других объектов ничего не зная о них
т.е. можно ли перерисовывать не сразу все объекты, а по отдельности?
...
Рейтинг: 0 / 0
09.05.2004, 22:19
    #32511814
Green2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
Можно использовать потоки
...
Рейтинг: 0 / 0
10.05.2004, 07:59
    #32511875
omygut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
понятно, что каждый объект перерисовывается в своем потоке
не понятно, как его там перерисовывать отдельно от других объектов
...
Рейтинг: 0 / 0
10.05.2004, 08:28
    #32511879
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
а зачем каждый объект отрисовывать в своем потоке?
у вас что тысячапроцессорная графическая станция?
если нет, то скорости вы этим не добьетесь, удобства программирования съедятся необходимыми синхронизациями действий потоков.

саводить даже жва потока, основной и для графики, на мой взгляд - расточительно.

подходи к этому делу следующим образом:
кадр состоит из объектов.
каждый объект отрисовывается в зависимости от его свойств(координаты, текстуры, цвета, освещенность и т.п.)

задний фон - такой же объект как и всё остальное. либо состоит из нескольких объектов. например, небо, далекие горы, лес у подножья гор и близкий луг.

таким образом, 100% наполняя кадр объектами, у тебя не будет необходимости запоминать, а что там было под объектом. У тебя будет просто одна процедура отрисовки объекта, и ты будешь ее вызывать в цикле для всех объектов отсортировав по Z координате.
...
Рейтинг: 0 / 0
10.05.2004, 09:34
    #32511888
omygut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
короче, по отдельности перерисовывать объекты невозможно?
...
Рейтинг: 0 / 0
10.05.2004, 10:08
    #32511911
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
возможно все.
вопрос, сколько жизненной энергии ты готов на это положить.
...
Рейтинг: 0 / 0
10.05.2004, 10:47
    #32511939
omygut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
мне все равно сколько энергии
главное, чтобы перерисовка для каждого объекта осуществлялась в разных потоках
как это сделать?
...
Рейтинг: 0 / 0
10.05.2004, 10:56
    #32511943
Green2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
так просто рисуй в разных потоках и все.
...
Рейтинг: 0 / 0
10.05.2004, 11:15
    #32511955
omygut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
не получается
во-первых как двигать объект: обычная используешь - копируешь сначала ту область, куда собираешься переместить объект, рисуешь объект на эту область и после очередного перемещения объекта снова востанавливаешь этот кусочек, который был под ним. Эта формула здесь не проходит, потому что другие объекты тоже двигаются, и сохраняемая область может поменяться
а по-другому я не знаю как
???
...
Рейтинг: 0 / 0
10.05.2004, 11:30
    #32511966
Green2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
omygut внимательно почитай alex_k

Не надо восстанавливать затертое изображение, надо рисовать новое и подставлять его на экран.
...
Рейтинг: 0 / 0
11.05.2004, 08:23
    #32512528
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
Дайте и мне шашкой помахать! :)

ну, для начала, смотря как движутся объекты...

если, к примеру, по 1-2 точки, то можно кроме самого объекта рисовать рамку в 1-2 точки цветом фона (если он однородный), тогда предыдущее изображение будет затёрто самим объектом.

если нет, то
надо запоминать, то что было на фоне, потом рисовать поверх старого объекта и затем рисовать новый в новом месте.

или

перед тем как рисовать объекты полностью отрисовывать фон.

к тому же:

тут надо использовать Мутех. Для синхронизации.
первым право на мутех должен получить поток отрисовки фона.
потом он его отпускает и дальше кто первый его схватил, тот и рисует.

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

Правда, если потоков слишком много, есть вероятность, что некоторые Мутеха не получать :) Тут уже надо раздавать приоритеты...
...
Рейтинг: 0 / 0
11.05.2004, 11:44
    #32512841
omygut
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
Пока у одного мутех, он затирает старый рисунок, не боясь, что туда в этот момент кто-то что-то нарисует


а если кто-то нарисует в промежутке между запоминанием куска фона и отрисовки объекта (затирание старого рисунка и созданием нового)
...
Рейтинг: 0 / 0
11.05.2004, 11:48
    #32512848
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
да забудьте вы про потоки!
кто вам вообще эти потоки в голову вбил?
...
Рейтинг: 0 / 0
12.05.2004, 07:31
    #32514122
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
движущиеся объекты
автора если кто-то нарисует в промежутке между запоминанием куска фона и отрисовки объекта (затирание старого рисунка и созданием нового)
Да, кстати, когда второй начнёт восстанавливать фон, он как раз отрисует кусок первого.

Но это должно работать, если объекты не пересекаются.

авторда забудьте вы про потоки!
кто вам вообще эти потоки в голову вбил?

И то правда? Зачем тут потоки?
Если идут какие-то процессы в потоках, то пусть они своё состояние в какой-нибудь глобальный массив складывают. А оттуда один поток берёт всю информацию и отрисовывает.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / движущиеся объекты / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]