Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Программирование (http://zx-pk.ru/forumdisplay.php?f=14)
-   -   Трудно ли программировать спрайтовые движки? (http://zx-pk.ru/showthread.php?t=4376)

Romanich 15th December 2006 10:17

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

Не секрет наверное, что я сделал видеокарточку на основе 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 цветов

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

ng_dead 15th December 2006 10:49

Quote:

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

имхо спрайты не предназначены для вывода большого изображения. понятно что не удобно... есть такой прием, если объект большой, то его помещают не как спрайт, а как фон и потом скроллируют и т.п.

NovaStorm 15th December 2006 11:57

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

Romanich 15th December 2006 13:07

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

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

справедливо, если писать рендеринг на голом асме ;)

ng_dead 15th December 2006 13:39

Блин, я правильно понял, у v9990 нет флага коллизии спрайтов? или я что упустил?

Lethargeek 15th December 2006 14:06

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

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

ng_dead 15th December 2006 14:19

Quote:

Originally Posted by Lethargeek
Упоминания на collision detection в доках V9990 я тоже не нашел

Ну тогда ручками коллизии вычислять - единственный выход = куча лишних проверок при каждом цикле.
2Romanych. попробуй поискать инфу на MSX-форумах, там много примеров с алгоритмами проскакивает.

newart 15th December 2006 14:52

Quote:

Originally Posted by ng_dead
Блин, я правильно понял, у v9990 нет флага коллизии спрайтов? или я что упустил?

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

ng_dead 15th December 2006 15:01

Quote:

Originally Posted by newart
А чем этот флаг проще чем ручная проверка Box'ов спрайтов?

Позволяет исключить лишние проверки из основного цикла. Вместо того чтобы обсчитывать все коллизии (даже если их нет!), просто проверяем флаг. если 1 уходим на обсчет.

Romanich 15th December 2006 16:09

Quote:

Originally Posted by newart
Тема какая то очень странная, на спектруме писали все ручками и не парились, а тут почти все делает видео проц и возникают такие элементарные вопросы.

нифига она не странная - просто не работал я со спрайтами и всё...
поэтому прошу помочь...

на счёт флага коллизий 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.