|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.11.2007, 18:15 | #291 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Работа с графикой GDI RGB
Итак, хочу спросить прямо по работе с графикой в оперативной памяти. Почему вопрос сюда? ...да потому, что мы конкретно создаем игру на Delphi, и чего-то вразумительного в сети я просто не нашел. Возможно, есть люди, имеющие больше опыта с GDI, они подскажут наиболее эффективный алгоритм, или хотя бы отпишут куда смотреть.
Как основной программист движка уже перепробовал кучу методов, начиная от VCL до GDI (WinAPI для работы с графикой), а также комбинировал методы. Машина, на которой производилось тестирование достаточно мощная: P4 3GHz 3х512М, и она выдерживала даже издевательство канвой (Canvas) на прорисовке в 3 этапа экрана 1024х768 32Bit 24FPS с загрузкой процессора 72%, в присутствии 256-и независимо движущихся объектов. Однако, на слабой машине (не будем указывать конкретно) этим же алгоритмом даже голое тайловое поле без объектов садит процессор на 50%. Так, что есть, над чем поломать голову. Немного введу в курс дела, ...сейчас дело обстоит лучше, но не совсем. Для доступа к изображению (к строкам пикселей BitMap) используется функция ScanLine, ее результат хранится в переменной типа Pointer, после позиционирования на конкретном пикселе определяется PRGBTriple (24bit) и, соответственно, разложение последнего на RGB. Это проделывается с тремя слоями (фон, текстура, маска текстуры). Так вот, ищу метод более быстрого доступа к пикселям фона (карта), ведь ScanLine для участка 1024х768 возвращает строку, содержащую большую часть лишних пикселей, не участвующих в построении изображения в определенном участке карты, возникает много проблем в синхронизации с местом положения текстуры. Проблемы решены, но мне кажется методом, не столь оптимизированным, вот его суть: // Структура указателя на начало первой строки {Pointer}:={TBitmap}.ScanLine[0]; // Структура определения размера строки {Integer}:=Integer({TBitmap}.ScanLi ne[1])-Integer({TBitmap}.ScanLine[0]); // Цикл перебирает все строки в текстуре For y:=0 to {TBitmap}.Height-1 do begin // Структура указателя на первый пиксель DWORD({PRGBTriple}):=DWORD({Pointer }); // для фона DWORD({PRGBTriple}):=DWORD({Pointer })+{x-коорд}*SizeOf(TRGBTriple); // Цикл перебирает все пиксели текущей строки For x:=0 to {текстура}.Width-1 do begin // Смешивание цветов по формуле прозрачности ... // Структура указателя на следующие пиксели в текущей строке DWORD({PRGBTriple}):=DWORD({PRGBTri ple})+SizeOf(TRGBTriple); end; // Структура указателя на следующую строку DWORD({Pointer}):=DWORD({Pointer})+ {Integer}; end; Может есть смысл сохранить весь фон в переменной типа Pointer, и потом простым [x+y*W] сразу работать с нужными пикселами? ...или это медленнее? Пожалуйста, поделитесь опытом, только не нужно советов перейти на 3D и С++.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Последний раз редактировалось Beermonza; 03.11.2007 в 18:18. |
05.11.2007, 21:46 | #292 |
Форумчанин
Регистрация: 08.07.2007
Сообщений: 154
|
не используй TBitmap. Cделай свой type. ну просто в оригинальном оч. много переменных которых вы наверняка не используете. Я даж гдето видел статю по взлому стандартных компонентов.ща мож и не скажу где.
|
06.11.2007, 00:22 | #293 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Ну, дык, type свой можно, но какой лучше? Если не трудно, черкни че-нить структурно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
07.11.2007, 17:00 | #294 |
Пользователь
Регистрация: 05.11.2007
Сообщений: 10
|
Было бы весело, а на чем писать ... Тулзы хорошие !
ИМНО, конечно-же.
хттп://ex.runhosting.com - смотрите, и не говорите, что не видели !
|
20.11.2007, 18:55 | #295 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
И всё?
...наро-о-о-од! ...чего сделать-то можно, чтобы быстрее было?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
22.11.2007, 21:57 | #296 |
Форумчанин
Регистрация: 25.04.2007
Сообщений: 105
|
Без коментов)
]
|
23.11.2007, 14:00 | #297 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
2 Beermonza хочу обратить ваше внимание, вышла версия движка HGE (Haaf's Game Engine) для Дельфи, раньше была только для С++. Вывод графики - DirectX
Дельфи версия http://relishgames.com/forum/viewtopic.php?t=2805 Домашняя страница движка http://hge.relishgames.com/overview.html
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 23.11.2007 в 14:17. |
23.11.2007, 16:45 | #298 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Ну, у нас не просто цель сделать игру , а еще и попытка написать свой уникальный движок, ...в общем, мы учимся думать своей головой и находить конкретные решения. Т.е. есть цель, есть эффекивные алгоритмы, а их применение, компановка, даже переделка, как угодно, должна лежать на плечах программера ИМХО.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
23.11.2007, 17:41 | #299 | |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
|
23.11.2007, 20:09 | #300 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Мы пробуем все, и заодно учимся. Чужой опыт никогда, никого, ничему не учит, а лишь показывает "делай это", почему? , а если есть другой путь, может даже легче и эффективнее . Никто же не запрещает изобретать велосипед
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уроки по созданию игр для новичков... | -=DeS=- | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 750 | 14.11.2017 20:26 |
Музыка программистов - как вы относитесь к АРИИ? | Весёлый Жека | Свободное общение | 46 | 10.10.2008 22:32 |
Конкурсы по созданию игр на Delphi | mutabor | Свободное общение | 0 | 15.06.2007 12:40 |
Работа по созданию ПО | remix | Фриланс | 3 | 22.04.2007 11:00 |