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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2010, 02:50   #1
M0rf
Пользователь
 
Регистрация: 12.03.2010
Сообщений: 21
Стрелка Каким образом лучше организовать вывод графики?

Давно меня здесь не было. Игрушку переписал практически полностью под ООП. Но остался вопрос: каким образом лучше организовать вывод графики. Просьба: Canvas и Image не приплетать (я это попробовал, не очень понравилось). Думалось использовать OpenGl, но не очень рационально (мне нужны лишь быстрая загрузка изображений, а обилие глобальных переменных захламит код. Да и под ООП его прописать - придется помучиться). Что можете посоветовать?

З. Ы. Хотелось бы увидить ответ для С++. Заранее спасибо

Последний раз редактировалось M0rf; 11.08.2010 в 02:57. Причина: Правка
M0rf вне форума Ответить с цитированием
Старый 11.08.2010, 05:05   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Цитата:
Сообщение от M0rf Посмотреть сообщение
Давно меня здесь не было. Игрушку переписал практически полностью под ООП. Но остался вопрос: каким образом лучше организовать вывод графики. Просьба: Canvas и Image не приплетать (я это попробовал, не очень понравилось). Думалось использовать OpenGl, но не очень рационально (мне нужны лишь быстрая загрузка изображений, а обилие глобальных переменных захламит код. Да и под ООП его прописать - придется помучиться). Что можете посоветовать?

З. Ы. Хотелось бы увидить ответ для С++. Заранее спасибо
OpenGL, GDI+, DirectX
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 16.08.2010, 23:10   #3
GoodDA
фрилансер
Форумчанин
 
Аватар для GoodDA
 
Регистрация: 18.07.2008
Сообщений: 107
По умолчанию

под C++Builder можно GLScene попробовать, правда она больше под 3д
GoodDA вне форума Ответить с цитированием
Старый 03.12.2012, 12:48   #4
Wassail
Пользователь
 
Регистрация: 05.04.2010
Сообщений: 36
По умолчанию

Цитата:
Сообщение от M0rf Посмотреть сообщение
Давно меня здесь не было. Игрушку переписал практически полностью под ООП. Но остался вопрос: каким образом лучше организовать вывод графики. Просьба: Canvas и Image не приплетать (я это попробовал, не очень понравилось). Думалось использовать OpenGl, но не очень рационально (мне нужны лишь быстрая загрузка изображений, а обилие глобальных переменных захламит код. Да и под ООП его прописать - придется помучиться). Что можете посоветовать?

З. Ы. Хотелось бы увидить ответ для С++. Заранее спасибо
Для С++Builder XE теперь есть в стандартной поставке FireMonkey 2, но вполне подойдёт, а во многом и более функциональную по компонентам, GLScene.

Скачать последнюю версию исходников библиотеки GLScene for C++Builder XE3, исправленную для совместимости с CPP, можно , например, здесь:
http://yadi.sk/d/o1QGI2KA10MK1

Успехов
Wassail вне форума Ответить с цитированием
Старый 03.12.2012, 13:02   #5
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Найти подходящий графический движок? Если Canvas (читай GDI) не понравился, то голый DirectX и OpenGL подавно не понравятся. GDI+ не будет быстрее работать и вряд ли оттуда что-то принципиальное может потребоваться, чего нет в GDI (учитывая делфяйскую обёртку в виде TCanvas).
UPD. Я буду смотреть даты создания тем :D

Последний раз редактировалось pu4koff; 03.12.2012 в 13:09.
pu4koff вне форума Ответить с цитированием
Старый 03.12.2012, 15:27   #6
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Если Canvas (читай GDI) не понравился, то голый DirectX и OpenGL подавно не понравятся. GDI+ не будет быстрее работать и вряд ли оттуда что-то принципиальное может потребоваться, чего нет в GDI (учитывая делфяйскую обёртку в виде TCanvas).
Не читай, ...Canvas - обёртка, универсальная, много хуже чистого Win API GDI. Единственное что потребуется от GDI - это вывод в объект средствами BitBlt, остальное преобразование графики эффективнее проделывать в SSE регистрах процессора. Это Ассемблер, да, но всего лишь вставки, если они уже кем-то написаны, то дело сводится к прикрепленному модулю. Эффективность связки GDI+asm такая же как и у Direct Draw, при работе с растрами на форму, но еще и с поддержкой полного 8bit-альфаканала.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 04.12.2012, 00:01   #7
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Эффективность связки GDI+asm такая же как и у DirectDraw, при работе с растрами на форму, но еще и с поддержкой полного 8bit-альфаканала.
Абсолютно не верно, при работе с GDI нет прямого доступа к растру приходится постоянно переключатся между режимом ядра и пользовательским, для того чтобы минимизировать время для получения доступа к блоку растра приходится задействовать дополнительный буфер выделенный в куче, а это уже медленная операция но побыстрее чем попиксельный доступ функциями SetPixel/GetPixel. В DirectDraw прямой доступ к растру, просто надо получить указатель на область в видеопамяти у поверхности IDirectDrawSurface::Lock. Для не большой игрушки вполне хватит и блиттеров GDI на любой вкус BitBlt, StretchBlt, MaskBlt, TransparentBlt, AlphaBlend, PlgBlt.
Beermonza, не посмотрел, сравнение не с монопольным режимом.

Последний раз редактировалось Nuklon; 04.12.2012 в 00:03.
Nuklon вне форума Ответить с цитированием
Старый 04.12.2012, 14:34   #8
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Nuklon Посмотреть сообщение
Абсолютно не верно, при работе с GDI нет прямого доступа к растру приходится постоянно переключатся между режимом ядра и пользовательским, для того чтобы минимизировать время для получения доступа к блоку растра приходится задействовать дополнительный буфер выделенный в куче, а это уже медленная операция но побыстрее чем попиксельный доступ функциями SetPixel/GetPixel. В DirectDraw прямой доступ к растру, просто надо получить указатель на область в видеопамяти у поверхности IDirectDrawSurface::Lock. Для не большой игрушки вполне хватит и блиттеров GDI на любой вкус BitBlt, StretchBlt, MaskBlt, TransparentBlt, AlphaBlend, PlgBlt.
Beermonza, не посмотрел, сравнение не с монопольным режимом.
Прощаю Вам вашу неосведомленность, да и знать вы вряд ли могли, что я уже создал быстрый код без участия видеокарты, где используется GDI для вывода уже готового кадра в форму, т.е. только BitBlt. Кадр строится на ассемблере в SSE регистрах процессора, данные в оперативной памяти, вывод в форму по контексту, ...и это быстрее чем заставить DirectDraw рендерить полный альфа-канал (его там изначально нет).

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


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод результат запроса в label,каким образом? nuevegramodelamor Помощь студентам 1 28.04.2010 16:06
Каким образом процессор обращается к портам Ivan_32 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 30.07.2009 12:29
Каким образом можно установить предел?? Xander Общие вопросы Delphi 4 23.11.2008 10:27
Каким образом Delphi компилирует EXE? Jupiter Общие вопросы Delphi 4 26.03.2008 16:52
Каким образом скопировать файл? Kashp Общие вопросы Delphi 14 07.08.2007 11:44