Главная страница
    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, может что-нить в фоне работает, забыл отключить? У меня даже винамп с диспетчером задачь напару сотню попугаев съедают.


 
Vga ©   (2007-06-02 19:29) [41]

У меня test[homm] тоже проигрывает test[XProger] на полсотни кадров.
А на G80, AFAIK, основан на скалярных (а не векторных, как раньше) процессорах с плавающей точкой. R600 - на суперскалярных с плавающей точкой, но тоже не векторных.


 
XProger ©   (2007-06-02 19:50) [42]

homm, я сравнивал наши демки по очереди... твоя вроде не запускает вторичных процессов? )


 
Vga ©   (2007-06-02 20:29) [43]

Хех, я тоже переписал демку :) ~1800FPS
http://vgacich.narod.ru/test.7z


 
Vga ©   (2007-06-02 20:32) [44]

Мдя. А мож даже и 1900


 
homm ©   (2007-06-02 20:48) [45]

> Vga ©

Может тогда так? :)
procedure Render;
const
 W = 640 div 8;
 H = 480 div 8;
 D = 1/8;
var
 i: Integer;
 X, Y: Integer;
begin
 for i:=0 to 4799 do
 begin
   TCB[4*i].X:=Random(8)*D;
   TCB[4*i].Y:=Random(8)*D;
   TCB[4*i+1].X:=TCB[4*i].X+D;
   TCB[4*i+1].Y:=TCB[4*i].Y;
   TCB[4*i+2].X:=TCB[4*i].X+D;
   TCB[4*i+2].Y:=TCB[4*i].Y+D;
   TCB[4*i+3].X:=TCB[4*i].X;
   TCB[4*i+3].Y:=TCB[4*i].Y+D;
 end;
 glTexCoordPointer(2, GL_FLOAT, 0, @TCB[0]);
 glEnableClientState(GL_VERTEX_ARRAY);
 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
 glDrawArrays(GL_QUADS, 0, 19200);
 glDisableClientState(GL_VERTEX_ARRAY);
 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
end;


 
Vga ©   (2007-06-02 20:49) [46]

Кстати да :D


 
homm ©   (2007-06-02 20:50) [47]

У меня как раз 1900 и вышло, а без этого исправления писовался ккой-то бред и было не более 1300.


 
Vga ©   (2007-06-02 20:54) [48]

Тото картинка странная. И ФПС теперь 2100


 
homm ©   (2007-06-02 20:56) [49]

> Тото картинка странная. И ФПС теперь 2100

Ну вот, а автор той темы, с которой все и началось хотел все-то 30 :D


 
Vga ©   (2007-06-02 21:07) [50]

Залил с фиксом homm"а, http://vgacich.narod.ru/test_fix.7z


 
homm ©   (2007-06-02 21:13) [51]

Ну и победные для моей системы 2 килогерца, если заменить
glVertexPointer(2, GL_FLOAT, 0, @VB[0]);
на
glVertexPointer(2, GL_SHORT, 0, @VB[0]);

Ура! :)

Спасибо, друзья, узнал сегодня много интересного, все-же грфика не основное мое занятие :)


 
Vga ©   (2007-06-02 21:28) [52]

А с GLint? По идее, в 32бит системе должно быть быстрее, но требуется больше данных гонять по шине


 
Vga ©   (2007-06-02 21:31) [53]

И кстати, у тебя что за система? Видяха, ее шина, проц?


 
homm ©   (2007-06-02 21:38) [54]

> А с GLint?

Посредине между GL_FLOAT и GL_SHORT.


> В отрисовке здесь работает GPU, так что я спокойно могу
> крутить циклы до 100000 сложений в рендере и FPS даже не
> просядет )

Ну 100000 это конечно ты загнул, а вот 10000 да, работает практически без ущерба для основной сцены :)


 
homm ©   (2007-06-02 21:40) [55]

Sempron2800+ (разогнан с 1600 до 1760) память ДДР-2 около 600 что-то. PCI-E GF-7600GT.


 
homm ©   (2007-06-02 21:40) [56]

> память ДДР-2 около 600

это частота :)


 
Vga ©   (2007-06-02 21:41) [57]

Гм. Видимо влияет пропускная способность шин памяти и возможно карты. И проц видимо быстрее работает с целочисленной математикой.


 
homm ©   (2007-06-02 23:00) [58]

http://opengl.gamedev.ru/articles/?id=124
Лучше положения вершин, нормали, текс. координаты и др. атрибуты хранить в 16-битных целых (GL_SHORT) - это не даёт perfomance penalty начиная с Radeon 9200 и GF4Ti, зато существенно экономит память (при этом такие числа обладают гораздо большей точностью, чем half float) и снижает время загрузки геометрии (как с жёсткого диска в оперативную память, так и в буферы в видеопамяти).


 
Vga ©   (2007-06-02 23:46) [59]

Гм. Статью я читал, однако это благополучно забыл :) Но вообще-то, я имел в виду CPU


 
gray_falcon ©   (2007-06-03 00:00) [60]


> Ну вот, а автор той темы, с которой все и началось хотел
> все-то 30 :D


Ладно, считайте что уговорили, BitBlt, как говорится, хорошо, а OGL лучше. Тогда никто не покажет простой пример применения этой библиотеки (или DX) наподобие "загрузил бмп-вывел на экран и все". Желательно если хоть с какимито комментариями. А то с этими экзаменами времени изучать справочники нету.
заранее благодарен :}


 
homm ©   (2007-06-03 00:05) [61]

> > Ну вот, а автор той темы, с которой все и началось хотел все-то 30 :D
> Ладно, считайте что уговорили, BitBlt, как говорится, хорошо, а OGL лучше.

Имлся ввиду другой автор(вроде бы) другой ветки :) Не могу я ее найти что-то :) А вообше, бери за основу как раз ХПрогеровскую демку, движек вполне хорош для маленьких проектов. Тока код движка наверное для D7 был написан, в D5 мне много чего править пришлось )


 
Vga ©   (2007-06-03 01:25) [62]

Пишет XProger вообще-то уже в D10 (если не 11) и планирует обломать более старые дельфи совсем, методом использования новых фич.
Для 2D там AFAIK непосредственно ничего нету, кроме общих инструментов и установки ортографической проекции. В этом плане лучше движок DGLE, хотя он довольно таки кривоват...
А вообще, AFAIK, Asphyre (экс PowerDraw) - вполне таки хороший двухмерный движок.
Если есть API для дельфи, то я слышал, что еще хорош PopCap Framework.

Ну а в качестве примера вполне сойдут исходники соответствующих функций из DGLE (http://dron.mirgames.ru)


 
Sapersky   (2007-06-04 14:41) [63]

За мерянием некими девайсами (которое, каюсь, я же и спровоцировал :)) никто не вспомнил про

http://www.igdc.ru/

Имеется множество игр с исходниками, и на аппаратных, и на софтверных движках. Аппаратных, впрочем, больше, из софтверных могу вспомнить космосим (или это называлось "скроллер", точно не помню) antonn"а и арканоид Imp"а.
+ готовые движки. Помнится, Darthman выкладывал простенький 2D-движок на OGL - DL-FX2, кажется, он назывался.


 
имя   (2007-06-17 15:33) [64]

Удалено модератором


 
имя   (2007-06-17 15:33) [65]

Удалено модератором


 
имя   (2007-06-17 15:33) [66]

Удалено модератором


 
имя   (2007-06-20 23:17) [67]

Удалено модератором


 
имя   (2007-07-25 06:51) [68]

Удалено модератором



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

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

Наверх





Память: 0.64 MB
Время: 0.064 c
15-1264270853
Нехочуха
2010-01-23 21:20
2010.08.27
Атака мертвецов


9-1186638715
wsaenotsock
2007-08-09 09:51
2010.08.27
GUI без VCL


15-1263829418
TStas
2010-01-18 18:43
2010.08.27
А куда пропало "Показать мои вопросы"


15-1269420643
Sergey2
2010-03-24 11:50
2010.08.27
формат с разделителями


15-1273733385
12
2010-05-13 10:49
2010.08.27
Проще или красивее, не?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский