Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

Как реализовать графику на 2D движке   Найти похожие ветки 

 
gray_falcon ©   (2007-05-29 15:51) [0]

Как можно осуществить быстрый вывод изображений с удалением фона и изменением размера, их быструю загрузку в ОЗУ, желательно без DirectX? А то мои прошлые "графические движки", если они вообще таковыми являлись, работали со скоростью бешеной черепахи.


 
@!!ex_   (2007-05-29 16:14) [1]

Я пишу на OPenGL, но пишу 3Д.
Для вывода 2Д вполне хватает кэнваса.
Могу пример кинуть.


 
Домик   (2007-05-29 21:29) [2]

> желательно без DirectX?

Думаю, что быструю графику хорошего качества с различными современными спецэффектами (пусть даже и 2д) без участия DirectX или OpenGL вряд ли получится получить. Но можно попробовать GDI (или GDI+?).

> Для вывода 2Д вполне хватает кэнваса.

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


 
homm ©   (2007-05-29 21:37) [3]

> [2] Домик

Вот GDI+ как раз использовать не нужно, ничего хорошего не выйдет  плане производительности.

Лучше на основе какого-нибудь FastDIB млм подобных.


 
@!!ex_   (2007-05-30 08:12) [4]

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

Вполне хватает.
НАсыщенная сцена с нормальным разрешщением легко рисуется.
Конечно не стандартными средствами VCL.

> homm,
как раз в этом лучше разбирается.


 
Домик   (2007-05-30 12:05) [5]

> homm ©   (29.05.07 21:37) [3]

Да, я знаю. Я сразу написал, что без DirectX или OpenGL быструю и качественную графику не сделать. Но если человеку очень хочеца без DrectX... Пусть пробует.

> НАсыщенная сцена с нормальным разрешщением легко рисуется.

Я бы не рискнул делать игру, основывая её графическую часть на канвасе :)


 
@!!ex_   (2007-05-30 13:51) [6]

> [5] Домик   (30.05.07 12:05)
> > homm ©   (29.05.07 21:37) [3]
>
> Да, я знаю. Я сразу написал, что без DirectX или OpenGL
> быструю и качественную графику не сделать. Но если человеку
> очень хочеца без DrectX... Пусть пробует.
>
> > НАсыщенная сцена с нормальным разрешщением легко рисуется.
>
> Я бы не рискнул делать игру, основывая её графическую часть
> на канвасе :)

Возможно мы под Канвасом подразумеваем разные вещи. Лично я под Канвасом подразумеваю ручной рендер основанный на стандартных средствах, без вмешательства DX и OGL. Такими средствами был в свое время написан Анрыл и много других хороших игр. ;)


 
Sapersky   (2007-05-30 20:29) [7]

У GDI/софтвера, кроме скорости вывода, есть ещё такая проблема - отсутствие нормального механизма двойной буферизации с переключением страниц (page flipping) и синхронизации с вертикальной развёрткой. Во всяком случае автор SpriteUtils, который в этом направлении копал долго и упорно, в конечном итоге пришёл к использованию DirectDraw. Правда, у него игра была весьма специфичная, с быстрым скроллингом карты, а если скроллинга нет или он относительно неторопливый, то, наверное, сойдёт и BitBlt.

По скорости - да, если руки прямые, можно сделать быстро, но догнать и тем более перегнать OpenGL/Direct3D вряд ли получится (на нормальной машине, у которой мощность видеокарты пропорциональна мощности CPU и видеокарта, само собой, поддерживает 3D-ускорение).
Даже интегрированное видео как минимум не проигрывает CPU. Есть у меня тест на блендинг (полупрозрачность) - exe, 30 кб:
http://slil.ru/24440980
Видеокарта (именно интегрированная, i915) быстрее Cel 2.8 в 2-3 раза.


 
@!!ex ©   (2007-05-30 20:36) [8]

> По скорости - да, если руки прямые, можно сделать быстро,
> но догнать и тем более перегнать OpenGL/Direct3D вряд ли
> получится (на нормальной машине, у которой мощность видеокарты
> пропорциональна мощности CPU и видеокарта, само собой, поддерживает
> 3D-ускорение).
> Даже интегрированное видео как минимум не проигрывает CPU.
> Есть у меня тест на блендинг (полупрозрачность) - exe, 30
> кб:

Да никто не спорит.
Для этого и создавались эти АПИ, для этого и видеокарты постоянно обновляются.


 
homm ©   (2007-05-30 22:18) [9]

> Есть у меня тест на блендинг (полупрозрачность) - exe, 30 кб:
> http://slil.ru/24440980

Это что еще за троян? Зачем она в сеть просится?


 
homm ©   (2007-05-30 22:53) [10]

Кстати, нельзя ли гденить еще исходчег выложить? Охото глянуть, как там софтвере сделан.


 
gray_falcon ©   (2007-05-31 00:13) [11]

От слов к делу! Покажите или исходничек без DX, ну или даже с DX (как бы мне сейчас не хотелось его использовать).
И еще, я пока не разрабатываю игру графикой похлеще чем в Готике 3 или Думе 3, и с поддержки DirectX 10, поэтому мне особо не нужны на этом движке яркие спецэффекты.
Это не отрицание DX, просто хотел провести разминку перед тем как писать с помощью него


 
Sapersky   (2007-05-31 02:43) [12]

Охото глянуть, как там софтвере сделан.

Additive - FastLIB"овский AddBlend.
Alpha - конвертированный под FastLIB MMXAlphaPut из SpriteUtils.

Кстати, с альфой довольно шустро работает функция GDI AlphaBlend, хотя, говорят, нестабильно в Win9x. Я тестировал на Win2000  - вроде всё нормально, скорость cопоставима с MMXAlphaPut, хотя AlphaBlend в некотором смысле "мухлюет" - использует premultiplied alpha, т.е. нужно заранее умножить на alpha пиксели исходной картинки.

От слов к делу! Покажите или исходничек без DX

Если по этому поводу:
http://delphimaster.net/view/8-1180354902/
то PixelFormat пробовал?
Я у себя проверял - действительно быстрее, но на разных ОС и драйверах оно может быть по-разному, поэтому выразился осторожно.
Теоретическая основа такая:
32 бита:
1) мелкософт умудряется писать жутко кривой код для обработки 24-битных картинок (притом что именно этот формат до XP включительно является стандартом). Проверено также со StretchBlt, и не только мной - 32-битные битмапы значительно быстрее.
2) на некоторых картах копирование на экран быстрее если формат битмапа = формату рабочего стола, а обычно стоит именно 32 бита.
pfDevice:
при выводе таких битмапов может использоваться (и обычно используется на NT-семействе, хотя зависит от драйвера) аппаратное ускорение, но только для простых операций вроде BitBlt и TransparentBlt (StretchBlt не ускоряется). Доступ к пикселям (Pixels, Scanlines) такого битмапа получить нельзя, точнее можно, но очень медленно.

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


 
cyborg ©   (2007-05-31 09:35) [13]

> [11] gray_falcon ©   (31.05.07 00:13)

Попробуй http://miniforum.ru/show.php?&forum=8&theme=136
Там используется директ икс, но с ним ты не будешь иметь дело напрямую.


 
XProger ©   (2007-05-31 11:33) [14]

http://timeforkill.mirgames.ru/img/scr/5.jpg - OpenGL
Мне страшно представить сколько нужно угрохать сил и нервов, чтобы заставить даже это работать на GDI... про FPS я, как человек культурный, промолчу )


 
gray_falcon ©   (2007-05-31 20:44) [15]


> PixelFormat пробовал?

еще как пробовал. Все идет ОК, теперь е*... мучаюсь со способами хранения групп изображений для последующего вывода.
А вообще я взял себе за образец движок игры "Alien Shooter" (играл кто-нибудь? Он мне больше нравится чем некоторые 3D шутеры). По моему это хороший ориентир. Ну дак вот там изображения хранятся в файлах *.vid и выводятся один за одним в зависимости от угла поворота. Щас разрабатываю эту структуру хранения различных видов объекта.


 
XProger ©   (2007-05-31 21:13) [16]

gray_falcon, ядро у Alien Shooter основано на DirectX. И даже такой скорости тебе никакой GDI движок не даст )


 
@!!ex ©   (2007-05-31 21:15) [17]

Хм. Я навино полгалал, что Алиен Шутер - смесь 3Д и 2Д. Я ошибался? :)) Надо будет на dtf спросить.


 
Yashin ©   (2007-05-31 21:50) [18]

сейчас вышел Alien Shooter полный 3D !


 
homm ©   (2007-06-01 09:14) [19]

> И даже такой скорости тебе никакой GDI движок не даст )

Что значит «И даже такой» ? :) Он у меня 300-500 fps выдет :)


 
Домик   (2007-06-01 13:20) [20]

> сейчас вышел Alien Shooter полный 3D !

Если имеется в виду Alien Shooter 2, то спешу вас огорчить, там все 2D.


 
XProger ©   (2007-06-01 19:19) [21]

homm, сомневаюсь что твой GDI движок способен выводить столько контента с достойной скоростью на таком разрешении.


 
@!!ex ©   (2007-06-01 20:12) [22]

> XProger ©   (01.06.07 19:19)

Не, никто не спорит, что CPU+GPU быстрее, чем CPU. Но все же ИМХО не стоит сбрасывать все это сосчетов.


 
homm ©   (2007-06-01 21:16) [23]

> homm, сомневаюсь что твой GDI движок способен выводить столько
> контента с достойной скоростью на таком разрешении.

Да я спорю что-ли :), я про то что Alien Shooter выдает фэпээсов совсем не «и даже» :))


 
homm ©   (2007-06-01 22:31) [24]

Кстати, XProger (и не только), помнишь кто-то спрашивал, как можно наиболее оптимально заполнить поле 640х480 квадратами 8х8? Я вылизал алгоритм  до самого предела. Если интересно, кто-нибудь возметься реализовать такое на апаратном ускорении (каком — без разницы), чисто ради сравнить результаты? Мне почему-то кажеться, что быстрее не может получиться.
Вот что у меня получилось по скорости в полном software: На формирование одного кадра уходит примерно 3,1 МГц, что соответствует примерно 1760/3,1 =566 кадров в секунду! Причем если отключить только одну функцию BitBlt, переносящую результат на экран, получаем примерно 1760/1,6 = 1076 кадров в секунду! Конечно второй показатель практически безполезен, без блитинга в видеопамять.

В обшем вот архив с проектом и демкой (30 Кб)
http://homm86.narod.ru/files/fps.rar


 
XProger ©   (2007-06-01 23:08) [25]

homm, а можешь это сделать разноцветными квадратами с нормальным циклом отрисовки расчитывающим РЕАЛЬНЫЙ фпс в зависимости от кол-ва отрисованных кадров за последнюю секунду? За реализацию на OpenGL в таком случае - возьмусь.


 
homm ©   (2007-06-02 00:04) [26]

Обновил архив. Так и не понял, зачем имеено «разноцветными квадратами», но добавил и патернов, выбирай какой нравиться бльше :)


 
XProger ©   (2007-06-02 02:39) [27]

Меряться так меряться...
http://xproger.mirgames.ru/tmp/test.rar - даёт 860 FPS против твоих 260 :)
твой ход...


 
Vga ©   (2007-06-02 07:37) [28]

~1200FPS на демке homm, ~1000FPS на демке XProger :)


 
homm ©   (2007-06-02 09:48) [29]

Да уж, похоже вера в аппаратное ускорение вернулась :))
У меня 1500 получилось, в 3 раза больше :)


> ~1200FPS на демке homm, ~1000FPS на демке XProger :)
Что еше можно было ожидать от VGA ;) Наверное коре 2 дури и видео встроенное.


 
@!!ex ©   (2007-06-02 10:24) [30]

170 против 340.
Правда стоит заметить что запускалось все при напрочь загруженном проце и пустой карте...


> [29] homm ©   (02.06.07 09:48)

Еще раз убеждаемся, что все зависит только от оборудования.


 
Vga ©   (2007-06-02 10:41) [31]

Core 2 Duo E6300, ATI Radeon X1950Pro - мягко говоря не чета встроенному.


 
homm ©   (2007-06-02 10:56) [32]

> [31] Vga

тогда не знаю, почему Прогеровская демка так «тормозила» :) У меня 7600GT, как уже говорил 1500fps.


 
Vga ©   (2007-06-02 10:59) [33]

Одна из причин - на АТИ под винду опенгл сделан через жопу, увы. На маках говорят дрова лучше, но то маки и там дырекса нету


 
gray_falcon ©   (2007-06-02 14:43) [34]

Объясните мне, или я че не допонял, мне зачем выводить изображение 1000 раз в секунду, когда у меня CRT с частотой обновления экрана в 100 Гц. Мне вполне этой 100 хватит, такую частоту 2D движок на канвасе точно потянет.


 
homm ©   (2007-06-02 15:10) [35]

> Объясните мне, или я че не допонял, мне зачем выводить изображение 1000 раз в секунду

Нужно пытаться минимизировать время построения любого объекта. Представь группу разработчиков. Оди реализует HDR шейдеры, другой модели рисует, третий текстуры, четвертый картой занимаеться. Делают они каждый свое дело, у каждого по 80-100 кадров на тестовый сценах получаеться, а потом все это дело собирают и получаеться не более 20. Вроде-бы и так все шустро было, а игра получилась тормознутая.


 
XProger ©   (2007-06-02 15:38) [36]

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


 
homm ©   (2007-06-02 16:55) [37]

> [27] XProger ©   (02.06.07 02:39)
> твой ход...

Ну давай, попробую :))
http://homm86.narod.ru/files/test.rar

Правда это уже на основе твоей демы, но все равно, я еше 230 кадров из нее выжал :P


 
XProger ©   (2007-06-02 18:17) [38]

homm, а у меня почему-то проигрывает на 150 фпс... я так понимаю ты попытался выйграть на облегчении работы CPU...
В отрисовке здесь работает GPU, так что я спокойно могу крутить циклы до 100000 сложений в рендере и FPS даже не просядет )


 
CloseGL   (2007-06-02 18:23) [39]

Ну не знаю как у вас, а у меня 1376 - 1378 FPS =)


 
homm ©   (2007-06-02 18:26) [40]

> а у меня почему-то проигрывает на 150 фпс...

«Этого не может быть, потому что этого не может быть» ©
Очень интересный результат. :) Я бы понял, если бы 8-й жифорс сравновали, там что-то говорили о переводе логики из режима работы с плавающей точкой в целочисленый, ито это для шейдеров, а так вообще не понятно.
Может кто еще попробует и скажет, какой вариант выдает сколько фэпээсов?

ЗЫ XProger, может что-нить в фоне работает, забыл отключить? У меня даже винамп с диспетчером задачь напару сотню попугаев съедают.



Страницы: 1 2 вся ветка

Форум: "Игры";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.055 c
15-1267253714
Григорьев Антон
2010-02-27 09:55
2010.08.27
Умер Архангельский


15-1268773367
Nic
2010-03-17 00:02
2010.08.27
НДС - непонятно немного


15-1265873696
12
2010-02-11 10:34
2010.08.27
Начать писать на php.


15-1271830825
12
2010-04-21 10:20
2010.08.27
Apache2.2. Странный глюк


15-1270053342
AntonioBanderas
2010-03-31 20:35
2010.08.27
MSDOS программка перестала запускаться





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский