Конференция "Игры" » Как реализовать графику на 2D движке [Delphi, Windows]
 
  • gray_falcon © (29.05.07 15:51) [0]
    Как можно осуществить быстрый вывод изображений с удалением фона и изменением размера, их быструю загрузку в ОЗУ, желательно без DirectX? А то мои прошлые "графические движки", если они вообще таковыми являлись, работали со скоростью бешеной черепахи.
  • @!!ex_ (29.05.07 16:14) [1]
    Я пишу на OPenGL, но пишу 3Д.
    Для вывода 2Д вполне хватает кэнваса.
    Могу пример кинуть.
  • Домик (29.05.07 21:29) [2]
    > желательно без DirectX?

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

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

    Только в том случае если ты собираешься выводить графики, или примитивную графику аля прототип игры. Для графики полноценной игры, возможностей канваса не хватит :)
  • homm © (29.05.07 21:37) [3]
    > [2] Домик

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

    Лучше на основе какого-нибудь FastDIB млм подобных.
  • @!!ex_ (30.05.07 08:12) [4]
    > Только в том случае если ты собираешься выводить графики,
    > или примитивную графику аля прототип игры. Для графики
    > полноценной игры, возможностей канваса не хватит :)

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

    > homm,
    как раз в этом лучше разбирается.
  • Домик (30.05.07 12:05) [5]
    > homm ©   (29.05.07 21:37) [3]

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

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

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

    Возможно мы под Канвасом подразумеваем разные вещи. Лично я под Канвасом подразумеваю ручной рендер основанный на стандартных средствах, без вмешательства DX и OGL. Такими средствами был в свое время написан Анрыл и много других хороших игр. ;)
  • Sapersky (30.05.07 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 © (30.05.07 20:36) [8]
    > По скорости - да, если руки прямые, можно сделать быстро,
    > но догнать и тем более перегнать OpenGL/Direct3D вряд ли
    > получится (на нормальной машине, у которой мощность видеокарты
    > пропорциональна мощности CPU и видеокарта, само собой, поддерживает
    > 3D-ускорение).
    > Даже интегрированное видео как минимум не проигрывает CPU.
    > Есть у меня тест на блендинг (полупрозрачность) - exe, 30
    > кб:

    Да никто не спорит.
    Для этого и создавались эти АПИ, для этого и видеокарты постоянно обновляются.
  • homm © (30.05.07 22:18) [9]
    > Есть у меня тест на блендинг (полупрозрачность) - exe, 30 кб:
    > http://slil.ru/24440980

    Это что еще за троян? Зачем она в сеть просится?
  • homm © (30.05.07 22:53) [10]
    Кстати, нельзя ли гденить еще исходчег выложить? Охото глянуть, как там софтвере сделан.
  • gray_falcon © (31.05.07 00:13) [11]
    От слов к делу! Покажите или исходничек без DX, ну или даже с DX (как бы мне сейчас не хотелось его использовать).
    И еще, я пока не разрабатываю игру графикой похлеще чем в Готике 3 или Думе 3, и с поддержки DirectX 10, поэтому мне особо не нужны на этом движке яркие спецэффекты.
    Это не отрицание DX, просто хотел провести разминку перед тем как писать с помощью него
  • Sapersky (31.05.07 02:43) [12]
    Охото глянуть, как там софтвере сделан.

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

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

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

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

    Если так уж надо исходничек примера с блендингом - завтра, может быть... то есть, гм, сегодня, но днём.
  • cyborg © (31.05.07 09:35) [13]
    > [11] gray_falcon ©   (31.05.07 00:13)

    Попробуй http://miniforum.ru/show.php?&forum=8&theme=136
    Там используется директ икс, но с ним ты не будешь иметь дело напрямую.
  • XProger © (31.05.07 11:33) [14]
    http://timeforkill.mirgames.ru/img/scr/5.jpg - OpenGL
    Мне страшно представить сколько нужно угрохать сил и нервов, чтобы заставить даже это работать на GDI... про FPS я, как человек культурный, промолчу )
  • gray_falcon © (31.05.07 20:44) [15]

    > PixelFormat пробовал?

    еще как пробовал. Все идет ОК, теперь е*... мучаюсь со способами хранения групп изображений для последующего вывода.
    А вообще я взял себе за образец движок игры "Alien Shooter" (играл кто-нибудь? Он мне больше нравится чем некоторые 3D шутеры). По моему это хороший ориентир. Ну дак вот там изображения хранятся в файлах *.vid и выводятся один за одним в зависимости от угла поворота. Щас разрабатываю эту структуру хранения различных видов объекта.
  • XProger © (31.05.07 21:13) [16]
    gray_falcon, ядро у Alien Shooter основано на DirectX. И даже такой скорости тебе никакой GDI движок не даст )
  • @!!ex © (31.05.07 21:15) [17]
    Хм. Я навино полгалал, что Алиен Шутер - смесь 3Д и 2Д. Я ошибался? :)) Надо будет на dtf спросить.
  • Yashin © (31.05.07 21:50) [18]
    сейчас вышел Alien Shooter полный 3D !
  • homm © (01.06.07 09:14) [19]
    > И даже такой скорости тебе никакой GDI движок не даст )

    Что значит «И даже такой» ? :) Он у меня 300-500 fps выдет :)
 
Конференция "Игры" » Как реализовать графику на 2D движке [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]