Важная информация
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Рисование с прозрачностью во FreeBasic (*.PNG, *.BMP, пример с библой GL2D)

  1. #1 Рисование с прозрачностью во FreeBasic (*.PNG, *.BMP, пример с библой GL2D) 
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,819
    Сказал(а) спасибо
    1,806
    Поблагодарили 932 раз(а) в 794 сообщениях
    Записей в блоге
    1

    Приветствую всех форумчан!

    Топик носит информационный характер, т.е. я выложу примеры и можно будет пообсуждать это дело.
    Сразу хочу выразить особую благодарность Станиславу Будинову, без его помощи не было бы и этих
    примеров и я б вообще, наверное, на это дело забил. Ещё на цайбере мы всё это обсуждали, я искал
    движки для 2D графики и узнал, что вполне хватает средств самого FreeBASIC. Сам FB имеет в своём
    арсенале приличную Software библиотеку FBGfx и доступ к Hardware функциям OpenGL(да скорость
    там потрясающая и на XP и на семёрке, в то время как на пюре я испытывал некоторые сложности).

    Итак ближе к делу, примеры:
    Сначала самое простое и аппетитное: отрисовка BMP + Альфа канал, прозрачный BMP можно создать
    в GIMP выбрав из меню файл опцию "экспортировать в", попутно установив формат *.BMP и 32 битный
    режим A8 R8 G8 B8 (см. скриншот менюшки).
    СКРИНШОТ МЕНЮШКИ



    Второй пример поясняет как загрузить *.PNG файл и нарисовать его с прозрачностью средствами FBGfx.


    Третий пример использует библиотеку GL2D, я её немного модифицировал, для подобных нужд.
    Теперь вы можете вообще легко юзать 2D, загружая *.PNG-шки. Да это OpenGL с ускорением.

    Надеюсь данный топик поможет страждущим поиметь прозрачную отрисовку спрайтиков и написать
    вожделенные пакманы, танчики и прочую ересь, но кто-то возможно извлечёт из этого большую пользу,
    нежели создание игрушек.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  2. Пользователь сказал cпасибо:

    Абадябер (22.01.2013)

  3. #2  
    Гуру Аватар для Абадябер
    Регистрация
    09.12.2010
    Адрес
    Беларусь, Минск
    Сообщений
    1,219
    Сказал(а) спасибо
    302
    Поблагодарили 176 раз(а) в 144 сообщениях
    Записей в блоге
    5
    Спасибо за интересный материал, нужно отложить в памяти, и не забыть ознакомиться подробно. Я-бы уже разбирался, если-бы не страдал своей либой, которую нужно допилить, также как и игру на ней, которая уже в процессе
    Одно только важно: насколько высока скорость отрисовки спрайтов? Я, помнится, запускал на своем ноуте какую-то графическую игру, написанную на FB, возможно, что даже на этой либе. И все ничего, если-бы оно на P1-100MHz, 24MB RAM не лагало безбожно.
    Хотя вообще, мне уже намного ближе паскаль, поэтому, скорее всего, если и буду, наконец (2013, уже давно, наверное, пора =)) переходить на новую среду разработки, то на Free Pascal, нежели на FB.
    Дружба-магия-радость!
    Ответить с цитированием  
     

  4. Пользователь сказал cпасибо:

    >Quiet Snow< (22.01.2013)

  5. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,819
    Сказал(а) спасибо
    1,806
    Поблагодарили 932 раз(а) в 794 сообщениях
    Записей в блоге
    1
    Одно только важно: насколько высока скорость отрисовки спрайтов?
    На OpenGL нереально высока. FBGfx тоже чую написан не салагами и на процах с MMX-ами
    и SSE-хами рвёт и мечет(в рамках разумного конечно ибо это Software).
    100 пенёк не, не пойдёт скорее всего, сам комп слабоват и оптимайз под него нужен
    конвееры + кеш, причём очень чётко ни шаг влево ни шаг вправо. Хотя бы на MMX-ах думаю
    можно уже пользовать(и асма надо много), а вот с ранними поколениями тяжко это 100%.
    Плюс сам FB не шибко оптимизирует, оптимизирует конечно, но до предела не дотягивает и
    скорее всего местами запарывает и кеш и конвеер.
    Я не измерял скорость функций и не делал подробный анализ, могу только сказать, что пюр меня
    пару раз взгрел чистым ВУ против асма, а на FB я ещё не делал такие тесты, скорее всего не взгреет
    по крайней мере чувствуется так, по многим прогам, какие я портировал. Язык к тому же ещё
    слабовато знаю, многие места, где оптимайз нужен я и сам запарываю. Но он не медленный это
    точно, т.е. форс есть, выжимать с FB тоже можно, есть асм с SSE, которые я даже уже проверил и
    вскоре начну осваивать, асм - ничего необычного, доку надо только найти, наощуп нехочется))).
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  6. #4  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    765
    Сказал(а) спасибо
    318
    Поблагодарили 337 раз(а) в 266 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    асм - ничего необычного, доку надо только найти, наощуп нехочется))).
    Я как-то искал (может пригодится):

    [Ссылки могут видеть только зарегистрированные пользователи. ]

    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Ответить с цитированием  
     

  7. 2 пользователя(ей) сказали cпасибо:

    >Quiet Snow< (22.01.2013), Абадябер (22.01.2013)

  8. #5  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,819
    Сказал(а) спасибо
    1,806
    Поблагодарили 932 раз(а) в 794 сообщениях
    Записей в блоге
    1
    Скоро допишу процедуры автоматической загрузки из *.BMP и автоматического сохранения в *.BMP
    с альфа каналом. Пример конечно же выложу. Всё под FBLite, кодить графику на FB становится очень
    просто.

    Посмотрел доки, блин мало что понял. Ну там про GNU утилиты, а я в этом совсем не шарю, т.е. совсем.
    Буду по примерам смотреть, супер пупер то и не надо, всё таки для вставок асм нужен, а не полное кодирование
    через асм, потому что так бы я взял FASM или MASM32. Ну до этого вопроса ещё не скоро доберусь, пока с
    графикой копаюсь.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  9. #6 Update 
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,819
    Сказал(а) спасибо
    1,806
    Поблагодарили 932 раз(а) в 794 сообщениях
    Записей в блоге
    1
    Update


    Допилил удобную загрузку и сейв, проверил на нескольких картинках, создаёт в самом надёжном
    формате, который везде читается(да я заметил, что не все *.BMP читаются везде, зависит от формата).
    Проверял и на FB и на FBLite, рабоатет, но всё же необходимо тестирование.



    Также заметил я, отсутствие в функционале FB ресайза буфера картинки, такой важной и нужной опции,
    короче говоря - надо будет это сделать, может быть чуть позже займусь. Всё таки опция реально нужна.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  10. #7  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    765
    Сказал(а) спасибо
    318
    Поблагодарили 337 раз(а) в 266 сообщениях
    Записей в блоге
    6
    У меня тормоза страшенные.

    Вот такой код у меня работает значительно быстрее:

    Код :
     
    SCREENRES ScrXRez, ScrYRez, 32, 2, FullSCR
    Screenset 1
    ...
    ...
    DO
     
     
           CLS
     
              FOR u = 1 TO 59 STEP 2
                    LINE (0, u SHL 3)-(ScrXRez - 1, u SHL 3 + 7), &H454545, BF
              NEXT
     
              ShadowPrint 20, 20, "Simple graphics cursor DEMO", RGB(160, 255, 50)
              ShadowPrint 20, 40, "Load 32Bit Alpha BMP cursor", RGB(50, 160, 255)
              ShadowPrint 20, ScrYRez - 20, "Press ESCAPE  -  for EXIT", RGB(255, 140, 35)
              ShadowPrint 20, ScrYRez - 60, "Coord :" + STR(Mx) + ", " + STR(My), RGB(255, 70, 200)
     
           GetMouse Mx, My, , Btn
           MouCurDraw Btn AND 1
           PUT (245 + COS(Dvig / 162.815506783) * 100, 200 - SIN(Dvig / 162.815506783) * 100), My_Image(2), ALPHA
           Dvig = (Dvig + 2) AND 1023
     
        PCopy
        Sleep(1)
     
    LOOP UNTIL InKey = CHR(27)

    Может это на win7 или только у меня такое ???

    Также заметил я, отсутствие в функционале FB ресайза буфера картинки, такой важной и нужной опции,
    короче говоря - надо будет это сделать, может быть чуть позже займусь. Всё таки опция реально нужна.
    Я пользуюсь для этого сорцами FreeBASIC Extended Library. А именно файлик libext-gfx-rotozoom.bas
    С помощью его можно поворачивать и изменять в размерах(пропорционально).

    P.S. все таки мне кажется лучше для использования графики брать OpenGL, а встроенную GFX оставить для мелочей. Скорости просто несопоставимы.
    Ответить с цитированием  
     

  11. Пользователь сказал cпасибо:

    >Quiet Snow< (24.01.2013)

  12. #8  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    765
    Сказал(а) спасибо
    318
    Поблагодарили 337 раз(а) в 266 сообщениях
    Записей в блоге
    6
    Или твой же код, но немного переделал:

    Код :
    DO
        ScreenLock                  '      Начало отрисовки
           CLS
              '    Полосатый экран
              FOR u = 1 TO 59 STEP 2
                    LINE (0, u SHL 3)-(ScrXRez - 1, u SHL 3 + 7), &H454545, BF
              NEXT
              '    Текстовые надписи
              ShadowPrint 20, 20, "Simple graphics cursor DEMO", RGB(160, 255, 50)
              ShadowPrint 20, 40, "Load 32Bit Alpha BMP cursor", RGB(50, 160, 255)
              ShadowPrint 20, ScrYRez - 20, "Press ESCAPE  -  for EXIT", RGB(255, 140, 35)
              ShadowPrint 20, ScrYRez - 60, "Coord :" + STR(Mx) + ", " + STR(My), RGB(255, 70, 200)
           '    Возьмём коорд. мыши и нарисуем курсор.
           GetMouse Mx, My, , Btn
           MouCurDraw Btn AND 1
           PUT (245 + COS(Dvig / 162.815506783) * 100, 200 - SIN(Dvig / 162.815506783) * 100), My_Image(2), ALPHA
           Dvig = (Dvig + 2) AND 1023
     
        ScreenUnlock             '       Конец отрисовки
        Sleep(1)
    LOOP UNTIL MultiKey(1)'InKey = CHR(27)        '     Выход по ESC

    теперь летает

    По существу:

    1) MultiKey(1) значительно быстрее InKey = CHR(27)
    2) разработчики советуют в блоке ScreenLock - ScreenUnlock не делать никаких лишних ожиданий вроде (Wait , sleep и пр.). Более того, если есть возможность , то вынести из блока различные вычисления. В общем только непосредственно вывод графики.
    Ответить с цитированием  
     

  13. Пользователь сказал cпасибо:

    >Quiet Snow< (24.01.2013)

  14. #9  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,819
    Сказал(а) спасибо
    1,806
    Поблагодарили 932 раз(а) в 794 сообщениях
    Записей в блоге
    1
    Может это на win7 или только у меня такое ???
    О нет только не это))) ну в целом да, значит win7 гадит, чего я к сожалению сейчас проверить не могу.

    Мультикей значительно быстрее? Ну блин салаги значит писали, ладно уже ничего не поделаешь, сам
    не буду эмулировать, ещё хуже будет, INKEY мне чисто нужен сам по себе, мульти он для другого...
    Понятно, я догадывался о ScreenLock - ScreenUnlock, в пюре та же песня была, что внутри ничего делать
    нельзя, синхру влепил не в тему, но показалось что будет быстрее чем та же синхра + FLIP, чтож ясно.
    Да удивлён что через PCOPY быстрее, буду иметь в виду, думал сделали как то через замену страниц, а
    оно копировалось получается, да ещё и медленно.
    SLEEP забыл, мой косяк, хотя бы 1-2 мс надо давать, но я обычно рендер не нагружаю в предел и синхру
    не ставлю. Буду потом смотреть как в потоках работает и как можно нагрузить, там даже будет более
    важным как ввод работает(клава\мышка), особенно та мышка, которую я так усердно пытался допилить.

    Спасибо за тест, следующую версию уже буду с поправками делать, ещё у себя нагрузочный тест
    погоняю, на Win7 тоже в ближайшее время проверю все варианты, Win7 пока только головную боль
    доставляет, на пюре был дичайший крендец с семёркой, софтваром рисовалось реально быстрее хардвара.
    Т.е. Direсt3D в двухмерке под семёркой вообще не катит, поэтому всё, что с ним связано сильно стопорит
    отрисовку, а я как назло не угадал с этим и запилил прожект на Dx9 в 2D, на семёрке был просто Epic Fail,
    слайдшоу с очень даже нормального FPS-а на XP(падение FPS ровно в 10 раз!!!).

    P.S. все таки мне кажется лучше для использования графики брать OpenGL, а встроенную GFX оставить для мелочей.
    Так и будет, GL в приоритете несомненно. Осваиваюсь на платформе, кучу всего написать надо.
    GL вообще жгуч оказался, такой скорости на всё про всё хватит, любой GUI, любое кол-во спрайтовых сеток.
    Под семёркой GL ещё быстрее в 1.5-2 раза. Ну прям халява какая-то. Вот где хардвар решает.

    Я пользуюсь для этого сорцами FreeBASIC Extended Library.
    Да думаю это напишу, фигня же, билинейку сделать, более ничего то и не надо супер пуперского.
    А так если прям вгрызаться, то у меня где-то был код для лагранж-интерполяции, но билинейки хватит сполна.
    Вращение - ну это уже навороты, да и реально лучше уже в OpenGL всякие вращалки делать. А вот ресайз
    нужен, пускай даже и не очень быстрый, для стартовой загрузки изображений в нужный размер.
    Последний раз редактировалось >Quiet Snow<; 24.01.2013 в 19:37.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  15. #10  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    765
    Сказал(а) спасибо
    318
    Поблагодарили 337 раз(а) в 266 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    А вот ресайз нужен, пускай даже и не очень быстрый, для стартовой загрузки изображений в нужный размер.
    Вообще я конечно при желании легко найду такое хоть в OpenGL хоть в GDI, но если действительно напишешь ресайз, хотелось бы не только пропорциональное изменение. А вообще разрабам бы стоило FbGFX перенести с DirectDraw на OpenGL. По сути и кода-то не много (сплошные обертки). Зато какая скорость, да и потенциальные возможности по увеличению кол-ва высокоуровневых функций (оберток).
    Ответить с цитированием  
     

Страница 1 из 2 12 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. win api рисование
    от 123456789igor в разделе C/C++
    Ответов: 1
    Последнее сообщение: 23.10.2012, 08:40
  2. Рисование в PictureBox
    от Стас в разделе C/C++
    Ответов: 8
    Последнее сообщение: 05.10.2012, 16:20
  3. Утилита Redact v1.4 (Рисование примитивами, экспорт в код)
    от >Quiet Snow< в разделе Проекты на Basic
    Ответов: 9
    Последнее сообщение: 18.05.2012, 04:00
  4. Ответов: 1
    Последнее сообщение: 09.11.2011, 22:46
  5. FreeBASIC
    от Uzix в разделе Софт
    Ответов: 1
    Последнее сообщение: 08.11.2010, 21:41
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •