![]() |
Трудно ли программировать спрайтовые движки?
Приветствую всех!
Не секрет наверное, что я сделал видеокарточку на основе 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 цветов С удовольствием выслушаю советы и предложения программеров, которые использовали спрайтовую графику :) |
Quote:
|
По первому знакомству с доками, V9990 для программиста отвратителен.
Для спрайтового движка по-моему тоже не нужно сильно больше чем два экрана, blit'ы с отсечением,color key'ем и альфой. Картинки бить лучше всего вручную,своей конвертилкой. Хотя я как то встречал подобный софт, универсальности ему не хватало. Так что режь, и уменьшай цвета. Цикл в общем то измениться не должен. А работа со спрайтами, в том числе и столкновения, обычно требует Z координаты для кусков. PS:согласно http://msxbanzai.tni.nl/v9990/manual.html у чипа есть "VRAM WRITE ADDRESS" и "VRAM READ ADDRESS" ,но конечно спрайтами быстрее =) |
На всякий случай отмечу, что V9990 имеет 2Д-блиттер, но он настолько медленный, что даже "паршивенькие" видеокарты 90-х превосходили его в десятки раз по скорости.
Инными словами: 1) Софтварный 2Д-рендеринг на ПЦ быстрее блиттера V9990(парадокс но правда) 2) 2Д-движки акселей ПЦшных карт выигрыша в скорости НЕ ДАЮТ по сравнению с 1). Зато офигительно просты в использовании (не надо софтварность самому делать) справедливо, если писать рендеринг на голом асме ;) |
Блин, я правильно понял, у v9990 нет флага коллизии спрайтов? или я что упустил?
|
Имхо на сегодняшний день юзать всякие спрайтовые движки - чистый мазохизм.
А так наверно надо поискать в сети доку на тему "Как написать любительскую игру на Sega" или что-то в этом роде (именно по всяким приемам и стандартным решениям). Наверняка там будет что-то общее для всех спрайтово-тайловых режимов. Упоминания на collision detection в доках V9990 я тоже не нашел, и почему-то меня сей факт совсем не удивляет... :v2_sleep: |
Quote:
2Romanych. попробуй поискать инфу на MSX-форумах, там много примеров с алгоритмами проскакивает. |
Quote:
Апаратная коллизия полезна если только учитывает прозрачные пиксели (коллизия с точностью до пикселя). Тема какая то очень странная, на спектруме писали все ручками и не парились, а тут почти все делает видео проц и возникают такие элементарные вопросы. |
Quote:
|
Quote:
поэтому прошу помочь... на счёт флага коллизий V9990 - его просто нет |
| All times are GMT +4. The time now is 21:35. |
Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.