DirectDraw7 возможна ли аппаратная билинейная фильтрация при Блиттинге?
Особо актуально при масштабировании поверхности (scaling) или во время использования цветовых ключей (color keys), иначе без фильтрации картинка смотриться не очень, а использование софтверной фильтрации привидет к написанию софтверного "блиттера" что существенно скажеться на скорости работы программы.
Нет, невозможна.
Наверно, где-то нашел старый движок, он тебе понравился и ты решил его немного модернизировать?
Да нет, как и многие пишу свою 2Д игру, чисто в ознакомительных целях.
В сумме получаеться такая вот беда: Очень грубые контуры по краям объекта. Фильтрация бы ее решила.
В данном сэмпле не показано масштабирование объекта, могу только сказать, что там тоже не мешало бы сгладить.
Можно либо смириться с артефактами, либо отрисовывать спрайты через 3D. Второй вариант не намного сложнее 2D. Зато возможностей! Геометрические трансформации, освещение, полупрозрачность, более простая механика.
Cyber_Wanderer
По твоей проблеме.
Черные края появляются у тебя из-за того, что DD не поддерживает блиттинг с альфа-блендингом, а имеет такую фишку как color-key (почитай про это если не знаешь). А истребитель твой по-любому имеет полупрозрачные края - делай выводы =)
А при скейлинге, например, nvidia, насколько мы вычитали у них на форуме, убрала аппаратную поддержку фильтрации для DD в семерке.
Понимаю, что даты с разницой в 9 месяцев уже не актуальны, но чесное слово, был занят, а потом стало стыдно, что сразу не ответил, теперь собрался со смелостью.
По проблеме:
Все оказалось очень банально, пре-рендер оказался с "анти-алайзингом", а цветовые ключи отвечающие за прозрачность были настроенны на черный цвет RGB(0, 0, 0). Во время рендера, черный задник "нагло" смешивался при "анти-алайзинге" с самой моделлю и делал переход между ними не резко черным, а плавным, соответственно та плавность и не отсекалась как прозрачность, из-за этого создавались "не чисто черные" контуры по краям обьекта, а с плавным переходом, вот этот переход и прилипал к краям обьекта.
Решение проблемы не так очевидно. Отключение "анти-алайзинга" при создании пре-рендера, приводило к значительному ухудшению графики на деталях модели, например кабина не плавно сливалась с основным обьектом, а выделялась зазубринами по контуру. Соответственно, отключить сглаживание я не мог.
Помогла "волшебная палочка" в фотошопе, нужно было выделить черный задник подобрав диапазон перехода цветов, обычно ставил не больше 15, то-есть от RGB(0, 0, 0) до RGB(15, 15, 15), правда все зависит от цвета модельки, а потом его удалить, залив все черным цветом, вместе с задником удалялся и плавный переход. Это и решило проблему до вот такого варианта:
To old_proger
Про 3Д согласен, но я пишу двумерную игру и я хочу, чтобы она работала даже на Pentium 2, хотя ориентируюсь где-то на Pentium 4. Это просто желание написать свою 2Д игру, которое переросло в желание написать свой полностью "софтверный" рендер, не зависимый от какого-либо API, так что вариант с 3Д пока не подходит.
To MaxImuS
Это да, поддержка "альфа-блендинга" в Direct Draw осталась только на бумаге и уже никогда не выйдет в свет, а жаль - хороший инструмент бы получился. Я знаю что такое цветовые ключи, я про них вспоминаю в вопросе. Сейчас я использую минимум от Direct Draw - это возможность создать двойную буферизацию и получить указатель на задний буфер. Direct Draw уже "мертвый" инструмент и скоро от его поддержки останутся "рожки да копытца", но он отлично подходит для обучения, из-за этого я его и выбрал, плюс он имеет ряд уникальных возможностей которые если и есть в Direct3D, то где-то глубоко запрятаны, по этому сейчас Direct Draw отлично подходит как прослойка между программой рисования ("софтверный рендер") и графическим интерфейсом Windows.
Cyber_Wanderer
> и скоро от его поддержки останутся "рожки да копытца"
давно пора уже на Direct2D перейти
Тема в архиве.