IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Графические эффекты, Довольно глупая тема :D
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


подскажите какие-нибудь интересные графические 2д эффекты, фокусы с расстановкой пикселей или цветами, учитываю что не должна использоваться какая-либо видео акселерация видео картой(я имею ввиде без опенгл или дирестикс). Надеюсь вы меня поняли и что-нибудь подскажите :D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Что-нибудь такое?


Прикрепленные файлы
Прикрепленный файл  FireLens.ZIP ( 14.14 килобайт ) Кол-во скачиваний: 141
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


Да, спасибо. Линзу поизучаю, но хотелось бы ещё что-то интересное, моежт какие-то фокусы с изменением цвета и т.д.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(XaMMaX @ 6.05.2008 20:57) *

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

Кое-что из того, что в свое время собирал.
Те эффекты, что с текстовым режимом, работают, естественно, только в полноэкранном режиме, в окне не работают, хотя из виндов запускаются именно в окне.
Не забыть переключить Alt+Enter.

Сообщение отредактировано: andriano -


Прикрепленные файлы
Прикрепленный файл  DEMO.ZIP ( 131.6 килобайт ) Кол-во скачиваний: 158
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


не знаю подойдет или нет, но есть такая темка: Занимательная графика


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


2klem4, Переработаю на свой лад и подойдёт, спасибо и позор мне что я так плохо пользуюсь поиском :D

2andriano, Спасибо! :D

Сообщение отредактировано: XaMMaX -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


Господа знатоки, вот думаю как реализовать эффект для взрыва, собственно, что требуется:
Нужно сделать широкий круг увеличывающийся от точки взрыва, но круг должен искажать окружение, как взрывная волна или что вроде этого(я думаю для этого нужны только гетпиксели и путпиксели), в идеали хотелось бы не круг, а эллипс т.к. у меня игра в перспективе.
Чтобы понятней я пытался найти нормальный скриншот из игры где подобное реализовано(только так круг, а не эллипс), но нашёл только один не очень удачный скриншот т.к. там это не очень хорошо видно.
Изображение
Как вы видите от точки взрыва разрастается круг искажающий окружение. Правда он не очень больше, но надеюсь вы его разглядели :D
Есть какие-нибудь идеи как это реализовать? Где гедпиксели делать и т.д.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Если взрыв наподобие того, что справа - полупрозрачный анимированный спрайт.
Тот эффект, что ты описал (если я правильно понял), делается подобно линзе. Т.е. пиксели смещаются от центра "взрыва" вдоль радиуса.
Чтобы избежать "дырок" в формируемом изображении, для каждого пикселя результирующего изображения вычисляешь пиксель старого и из него берешь цвет, который записываешь в новое изображение.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


Цитата
Если взрыв наподобие того, что справа - полупрозрачный анимированный спрайт.

Нет нет, ты смотрел на сам взрыв, а не на взрывную волну, ну вот что-то такое, может наглядней:

Изображение

Цитата
Тот эффект, что ты описал (если я правильно понял), делается подобно линзе. Т.е. пиксели смещаются от центра "взрыва" вдоль радиуса.
Чтобы избежать "дырок" в формируемом изображении, для каждого пикселя результирующего изображения вычисляешь пиксель старого и из него берешь цвет, который записываешь в новое изображение.

Трям прям и не сообразить, но я так понимаю почти тоже самое, что пример линзы который ты приводил выше?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


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

И еще по поводу прежнего сообщения: если собираешься работать с динамичной графикой, например, с игрой, забудь про гетпиксель и путпиксель - это слишком медленно.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


Цитата
И еще по поводу прежнего сообщения: если собираешься работать с динамичной графикой, например, с игрой, забудь про гетпиксель и путпиксель - это слишком медленно.

Честно говоря, ты меня поставил в тупик. А как ещё можно это реализовать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Работаешь с экраном (вероятно экранным буфером) как с массивом пикселей без вызова процедур для отдельных точек. Притом, желательно в том порядке, в каком они расположены в буфере, т.е. по строкам растра.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


Значит ли это, что мне все процедуры надо переписывать для записи их в массив? Я честно говоря ещё начинающий(хотя нет, просто топчусь на месте) мне бы разжевать слегка :D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Не понял вопроса. Какие процедуры ты записываешь в массив? И зачем?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


Цитата
Работаешь с экраном (вероятно экранным буфером) как с массивом пикселей без вызова процедур для отдельных точек.

Хм, как с массивом, тоесть процедуры вывода допустим картинок должны писаться сразу в массив(всмысле не сами процедуры конечно, а картинки, которые они выводят)? Тоесть их надо специально переписывать? Или я совсем тупой? :D

Сообщение отредактировано: XaMMaX -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Любая процедура, участвующая в формировании изображения должна работать с объектами, существенно превосходящими одну точку. Скажем, со строкой растра, с прямоугольной областью экрана или с другим примитивом.
Внутри процедуры идет работа непосредственно с фреймбуфером. Сам фреймбуфер определяется адресом начала, глубиной цвета и длиной сканлинии в байтах. Именно используя эти параметры, процедура и осуществляет работу с изображением.
Процедуры типа putpixel и getpixel пригодны только для учебных примеров или статичной графики.
Собственно, сравни скорость формирования изображения при помощи этх процедур и непосредственной записью в фреймбуфер, и вопросы сами отпадут.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


А пример подобного где-нибудь посмотреть можно? Может даже на этом форуме, я просто фразу для поиска немогу удачную подобрать unsure.gif
Но я так понимаю придёться пользоваться ассемблером? Или я опять ничего не понял? Разве можно стандартными средствами узнать значения в фреймбуфере?

P.S.
Извини за подобные вопросы(наверняка глупые), просто мне реально хочеться этому научиться и я готов приложить усилия, но пока не понимаю куда копать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Можно, конечно, получить данные непосредственно экрана. Но это долго. Долго это было под DOS, т.к. видеопамять намного тормознее по операции чтения, чем по операции записи. Еще дольше это под Windows.
В то же время хорошо себя зарекомендовал следующий алгоритм:
1. готовим в оперативной памяти буфер в формате BMP-файла, причем, с удобной нам глубиной цвета.
2. в обработчике сообщения WM_PAINT процедурой StretchDIBits переливаем содержимое буфера на экран.
Примечания:
к п.1: обычно я использую 256-цветный режим, т.к. для операций в труколоре обычно больше подходит OpenGL. Но это мое личное мнение. Опять же, сущесвуют исключения, например, то, что я привел вл втором посте темы.
к п.2: мне кажется, что если размеры буферов совпадают (т.е. не требуется масштабирования), то операцию преобразования цвета (например от палитры 256 цветов в труколор) берет на себя железо видюшки прозрачно для программы. По крайней мере, судя по скорости этого преобразования.

Что же касается примера, то чем не подходит, опять же, архив из второго поста? Там я как раз реализовал описанную технику.

PS. Да, язык Ассемблера здесь в подавляющем большинстве случаев совсем необязателен. В приведенном римере, например, на нем написано всего несколько строк, и то лишь для того, чтобы использовать MMX для ускорения одного конкретного алгоритма.

Сообщение отредактировано: andriano -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Пионер
**

Группа: Пользователи
Сообщений: 85
Пол: Мужской
Реальное имя: max

Репутация: -  0  +


Цитата
Что же касается примера, то чем не подходит, опять же, архив из второго поста? Там я как раз реализовал описанную технику.

Да вот запустить не могу. Я так понимаю компилировать надо в делфи? Я открываю седьмым "FireLens.pas", но запустить нельзя в принципе(кнопка серая). Я уже давно делфи не пользовался и не могу понять в чём проблема wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Откомпилировано оно в TMT-Паскале, для Delphi, вероятно, надо адаптировать. 16-разрядным компилятором, не должно компилироваться в принципе. Поэтому сразу положил exe-шник, чтобы можно было посмотреть.

Собственно, привел-то я пример того, как можно сделать (общий принцип) и как это будет выглядеть. На то, что эта прогамма может быть откомпилирована без переделки я и не рассчитывал.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 23.11.2020 23:53
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name