ПрограммированиеФорум2D графика и изометрия

DirectDraw7 возможна ли аппаратная билинейная фильтрация при "Блиттинге"?

#0
22:11, 9 июля 2011

DirectDraw7 возможна ли аппаратная билинейная фильтрация при Блиттинге?

Особо актуально при масштабировании поверхности (scaling) или во время использования цветовых ключей (color keys), иначе без фильтрации картинка смотриться не очень, а использование софтверной фильтрации привидет к написанию софтверного "блиттера" что существенно скажеться на скорости работы программы.

#1
22:53, 11 июля 2011

Нет, невозможна.

Наверно, где-то нашел старый движок, он тебе понравился и ты решил его немного модернизировать?

#2
0:48, 12 июля 2011

Да нет, как и многие пишу свою 2Д игру, чисто в ознакомительных целях.

В сумме получаеться такая вот беда: Очень грубые контуры по краям объекта. Фильтрация бы ее решила.

Rastr_obj_problem | DirectDraw7 возможна ли аппаратная билинейная фильтрация при "Блиттинге"?

В данном сэмпле не показано масштабирование объекта, могу только сказать, что там тоже не мешало бы сгладить.

#3
23:02, 14 июля 2011

Можно либо смириться с артефактами, либо отрисовывать спрайты через 3D. Второй вариант не намного сложнее 2D. Зато возможностей! Геометрические трансформации, освещение, полупрозрачность, более простая механика.

#4
11:22, 15 июля 2011

Cyber_Wanderer
По твоей проблеме.
Черные края появляются у тебя из-за того, что DD не поддерживает блиттинг с альфа-блендингом, а имеет такую фишку как color-key (почитай про это если не знаешь). А истребитель твой по-любому имеет полупрозрачные края - делай выводы =)
А при скейлинге, например, nvidia, насколько мы вычитали у них на форуме, убрала аппаратную поддержку фильтрации для DD в семерке.

Прошло более 8 месяцев
#5
17:25, 19 мар 2012

Понимаю, что даты с разницой в 9 месяцев уже не актуальны, но чесное слово, был занят, а потом стало стыдно, что сразу не ответил, теперь собрался со смелостью.

По проблеме:
Все оказалось очень банально, пре-рендер оказался с "анти-алайзингом", а цветовые ключи отвечающие за прозрачность были настроенны на черный цвет RGB(0, 0, 0). Во время рендера, черный задник "нагло" смешивался при "анти-алайзинге" с самой моделлю и делал переход между ними не резко черным, а плавным, соответственно та плавность и не отсекалась как прозрачность, из-за этого создавались "не чисто черные" контуры по краям обьекта, а с плавным переходом, вот этот переход и прилипал к краям обьекта.

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

Помогла "волшебная палочка" в фотошопе, нужно было выделить черный задник подобрав диапазон перехода цветов, обычно ставил не больше 15, то-есть от RGB(0, 0, 0) до RGB(15, 15, 15), правда все зависит от цвета модельки, а потом его удалить, залив все черным цветом, вместе с задником удалялся и плавный переход. Это и решило проблему до вот такого варианта:

Problem_1_Solved | DirectDraw7 возможна ли аппаратная билинейная фильтрация при "Блиттинге"?

To old_proger
Про 3Д согласен, но я пишу двумерную игру и я хочу, чтобы она работала даже на Pentium 2, хотя ориентируюсь где-то на Pentium 4. Это просто желание написать свою 2Д игру, которое переросло в желание написать свой полностью "софтверный" рендер, не зависимый от какого-либо API, так что вариант с 3Д пока не подходит.

To MaxImuS
Это да, поддержка "альфа-блендинга" в Direct Draw осталась только на бумаге и уже никогда не выйдет в свет, а жаль - хороший инструмент бы получился. Я знаю что такое цветовые ключи, я про них вспоминаю в вопросе. Сейчас я использую минимум от Direct Draw - это возможность создать двойную буферизацию и получить указатель на задний буфер. Direct Draw уже "мертвый" инструмент и скоро от его поддержки останутся "рожки да копытца", но он отлично подходит для обучения, из-за этого я его и выбрал, плюс он имеет ряд уникальных возможностей которые если и есть в Direct3D, то где-то глубоко запрятаны, по этому сейчас Direct Draw отлично подходит как прослойка между программой рисования ("софтверный рендер") и графическим интерфейсом Windows.

#6
18:21, 19 мар 2012

Cyber_Wanderer
> и скоро от его поддержки останутся "рожки да копытца"
давно пора уже на Direct2D перейти

ПрограммированиеФорум2D графика и изометрия

Тема в архиве.