Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Как реализовать графику на 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;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.097 c
15-1265395623
GreyWolf
2010-02-05 21:47
2010.08.27
Ищу Fix for QC report 37403


3-1238562946
TheEd
2009-04-01 09:15
2010.08.27
как вычитать isert ы, произошедшие в триггере одной из таблиц


9-1184586954
Shurik_
2007-07-16 15:55
2010.08.27
Как повернуть текс в OenGL на любой угол


2-1274791952
DROWSY
2010-05-25 16:52
2010.08.27
Как симмитировать нажатие эскейпа на гриде?


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