Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 30

Тема: Трудно ли программировать спрайтовые движки?

  1. #1
    Activist Аватар для Romanich
    Регистрация
    02.11.2006
    Адрес
    Владивосток
    Сообщений
    481
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Трудно ли программировать спрайтовые движки?

    Приветствую всех!

    Не секрет наверное, что я сделал видеокарточку на основе V9990. Что за зверь-думаю объяснять тоже не надо...

    В прошлом я сталкивался с программированием 2D-графики на ПЦ. Начинал с софтварной реализации движков, закончил акселерацией "старых" видеокарточек (STrio 64V+, Voodoo2,Vooodoo3, S3 Savage4, RivaTNT M64). Программил естественно под DOS'ом не используя никаких графических библиотек. Пришёл к выводу, что пчти все 2D-движки вышеуказанных акселерированных карточек содержат следующее:
    1) Вторичную поверхность - где хранятся спрайты(битмапы)
    2) Первичную поверхность - которая отображается на экране
    3) Далее идёт либо блитинг поверхностей (с задней поверхности на первую) либо флипинг (когда поверхности рисуемые и отображаемые меняются местами с частотой развёртки дисплея)
    4) BitBlt со всеми разновидностями (прозрачность/операции...)
    5) Аппаратное Отсечение частей спарйтов(битмапов, выходящих за пределы экрана)
    6) Растровые операции при блитинге и битовые маски

    При освоении спрайтовых режимов V9990 столкнулся с трудностями - ИМХО неудобно пользоваться спрайтами, так как это на мой взгляд усложняет программирование графики. В памяти VDP есть таблица атрибутов спрайта где указываются: x,y - спрайта, его индекс палитры и атрибуты (mirror/enable /disable,...). Неудобно писать алгоритмы на столкновение двух спрайтов, малое количество цветов на один спрайт, принуждение бить на куски большое изображение итп итд...

    Вопрос вот в чем. Может кто-нибудь, кто программил спрайтовые (тайловые) режимы объяснит, как надо писать программы, используя спрайты. В частности интересуют:

    1) Как быстрее всего битмап побить на спрайты и оптимизировать цвета при разбиении

    2) Как реализовать анализ на столкновение спрайтов

    3) Как рулить спрайтами, чтоб удобно выводить большое изображение из них

    4) как должен быть построен основной цикл в программе для вывода сих спрайтов

    5) и многое другое чего не назвал, но существует в природе

    Для V9990 учесть, что 1спрайт=16x16pix, 16 цветов

    С удовольствием выслушаю советы и предложения программеров, которые использовали спрайтовую графику
    EMU Apparatchik Romanich
    http://emu-apparatchik.narod.ru

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Master Аватар для ng_dead
    Регистрация
    22.02.2006
    Адрес
    Москва
    Сообщений
    522
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Romanich
    Как рулить спрайтами, чтоб удобно выводить большое изображение из них
    имхо спрайты не предназначены для вывода большого изображения. понятно что не удобно... есть такой прием, если объект большой, то его помещают не как спрайт, а как фон и потом скроллируют и т.п.
    Time to burn! You losers better learn -
    No one controls our goddamn lifesl

    Дельта-С 128
    Amiga 600
    Raspberry Pi Rev. B

  4. #3
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По первому знакомству с доками, V9990 для программиста отвратителен.
    Для спрайтового движка по-моему тоже не нужно сильно больше чем два экрана, blit'ы с отсечением,color key'ем и альфой.
    Картинки бить лучше всего вручную,своей конвертилкой. Хотя я как то встречал подобный софт, универсальности ему не хватало. Так что режь, и уменьшай цвета.
    Цикл в общем то измениться не должен. А работа со спрайтами, в том числе и столкновения, обычно требует Z координаты для кусков.
    PS:согласно http://msxbanzai.tni.nl/v9990/manual.html у чипа есть "VRAM WRITE ADDRESS" и "VRAM READ ADDRESS" ,но конечно спрайтами быстрее =)
    Последний раз редактировалось NovaStorm; 15.12.2006 в 11:12.

  5. #4
    Activist Аватар для Romanich
    Регистрация
    02.11.2006
    Адрес
    Владивосток
    Сообщений
    481
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    На всякий случай отмечу, что V9990 имеет 2Д-блиттер, но он настолько медленный, что даже "паршивенькие" видеокарты 90-х превосходили его в десятки раз по скорости.

    Инными словами:
    1) Софтварный 2Д-рендеринг на ПЦ быстрее блиттера V9990(парадокс но правда)
    2) 2Д-движки акселей ПЦшных карт выигрыша в скорости НЕ ДАЮТ по сравнению с 1). Зато офигительно просты в использовании (не надо софтварность самому делать)

    справедливо, если писать рендеринг на голом асме
    EMU Apparatchik Romanich
    http://emu-apparatchik.narod.ru

  6. #5
    Master Аватар для ng_dead
    Регистрация
    22.02.2006
    Адрес
    Москва
    Сообщений
    522
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Блин, я правильно понял, у v9990 нет флага коллизии спрайтов? или я что упустил?
    Time to burn! You losers better learn -
    No one controls our goddamn lifesl

    Дельта-С 128
    Amiga 600
    Raspberry Pi Rev. B

  7. #6
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,549
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    267
    Спасибо Благодарностей получено 
    220
    Поблагодарили
    175 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Имхо на сегодняшний день юзать всякие спрайтовые движки - чистый мазохизм.
    А так наверно надо поискать в сети доку на тему "Как написать любительскую игру на Sega" или что-то в этом роде (именно по всяким приемам и стандартным решениям). Наверняка там будет что-то общее для всех спрайтово-тайловых режимов.

    Упоминания на collision detection в доках V9990 я тоже не нашел, и почему-то меня сей факт совсем не удивляет...

  8. #7
    Master Аватар для ng_dead
    Регистрация
    22.02.2006
    Адрес
    Москва
    Сообщений
    522
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Lethargeek
    Упоминания на collision detection в доках V9990 я тоже не нашел
    Ну тогда ручками коллизии вычислять - единственный выход = куча лишних проверок при каждом цикле.
    2Romanych. попробуй поискать инфу на MSX-форумах, там много примеров с алгоритмами проскакивает.
    Последний раз редактировалось ng_dead; 15.12.2006 в 13:22.
    Time to burn! You losers better learn -
    No one controls our goddamn lifesl

    Дельта-С 128
    Amiga 600
    Raspberry Pi Rev. B

  9. #8
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,440
    Спасибо Благодарностей отдано 
    192
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ng_dead
    Блин, я правильно понял, у v9990 нет флага коллизии спрайтов? или я что упустил?
    А чем этот флаг проще чем ручная проверка Box'ов спрайтов?
    Апаратная коллизия полезна если только учитывает прозрачные пиксели (коллизия с точностью до пикселя).
    Тема какая то очень странная, на спектруме писали все ручками и не парились, а тут почти все делает видео проц и возникают такие элементарные вопросы.

  10. #9
    Master Аватар для ng_dead
    Регистрация
    22.02.2006
    Адрес
    Москва
    Сообщений
    522
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart
    А чем этот флаг проще чем ручная проверка Box'ов спрайтов?
    Позволяет исключить лишние проверки из основного цикла. Вместо того чтобы обсчитывать все коллизии (даже если их нет!), просто проверяем флаг. если 1 уходим на обсчет.
    Time to burn! You losers better learn -
    No one controls our goddamn lifesl

    Дельта-С 128
    Amiga 600
    Raspberry Pi Rev. B

  11. #10
    Activist Аватар для Romanich
    Регистрация
    02.11.2006
    Адрес
    Владивосток
    Сообщений
    481
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart
    Тема какая то очень странная, на спектруме писали все ручками и не парились, а тут почти все делает видео проц и возникают такие элементарные вопросы.
    нифига она не странная - просто не работал я со спрайтами и всё...
    поэтому прошу помочь...

    на счёт флага коллизий V9990 - его просто нет
    EMU Apparatchik Romanich
    http://emu-apparatchik.narod.ru

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

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

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •