Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2007, 18:15   #291
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 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.
Beermonza вне форума Ответить с цитированием
Старый 05.11.2007, 21:46   #292
Iceman
Форумчанин
 
Регистрация: 08.07.2007
Сообщений: 154
По умолчанию

не используй TBitmap. Cделай свой type. ну просто в оригинальном оч. много переменных которых вы наверняка не используете. Я даж гдето видел статю по взлому стандартных компонентов.ща мож и не скажу где.
Iceman вне форума Ответить с цитированием
Старый 06.11.2007, 00:22   #293
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Вопрос

Ну, дык, type свой можно, но какой лучше? Если не трудно, черкни че-нить структурно.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 07.11.2007, 17:00   #294
mad-explorer
Пользователь
 
Регистрация: 05.11.2007
Сообщений: 10
По умолчанию

Было бы весело, а на чем писать ... Тулзы хорошие !
ИМНО, конечно-же.
хттп://ex.runhosting.com - смотрите, и не говорите, что не видели !
mad-explorer вне форума Ответить с цитированием
Старый 20.11.2007, 18:55   #295
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Вопрос

И всё?
...наро-о-о-од! ...чего сделать-то можно, чтобы быстрее было?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 22.11.2007, 21:57   #296
VTR
Форумчанин
 
Аватар для VTR
 
Регистрация: 25.04.2007
Сообщений: 105
Подмигивание

Без коментов)
Изображения
Тип файла: gif water.gif (65.8 Кб, 297 просмотров)
]
VTR вне форума Ответить с цитированием
Старый 23.11.2007, 14:00   #297
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 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.
mutabor вне форума Ответить с цитированием
Старый 23.11.2007, 16:45   #298
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Ну, у нас не просто цель сделать игру , а еще и попытка написать свой уникальный движок, ...в общем, мы учимся думать своей головой и находить конкретные решения. Т.е. есть цель, есть эффекивные алгоритмы, а их применение, компановка, даже переделка, как угодно, должна лежать на плечах программера ИМХО.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 23.11.2007, 17:41   #299
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
а еще и попытка написать свой уникальный движок
ну и зря, то что я предложил это не конструктор игр, а хороший графический движок, если мне не изменяет память вы еще недавно на GDI пытались делать, и вдруг собственный DX движок???
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, 20:09   #300
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Радость

Мы пробуем все, и заодно учимся. Чужой опыт никогда, никого, ничему не учит, а лишь показывает "делай это", почему? , а если есть другой путь, может даже легче и эффективнее . Никто же не запрещает изобретать велосипед
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Уроки по созданию игр для новичков... -=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