Форум: "Media";
Текущий архив: 2010.12.12;
Скачать: [xml.tar.bz2];
ВнизСглаживание при вызове метода blt поверхности DirectX в Висте Найти похожие ветки
← →
Дмитрий Белькевич © (2008-04-12 15:46) [0]Вызываю IDirectDrawSurface.Blt для переноса изображения с некоторой экранной поверхности на первичную. При этом размеры области для переноса на первичной поверхности и изначальной поверхности чаще всего не совпадают.
В Win XP и более старых включается хардварный стретч, и видюха сама качественно растягивает либо сжимает изображение. В Висте же для стретча применяется алгоритм "ближайший сосед". Стретч быстрый, но некачественный.
Можно ли в Висте как-то включить качественный алгоритм сглаживания при изменении размера изображения?
← →
Дмитрий Белькевич © (2008-04-12 15:54) [1]Уточнения. IDirectDrawSurface.Blt ошибок не возвращает. DDCAPS_BLTSTRETCH драйвер умеет.
← →
Sapersky (2008-04-12 18:10) [2]Меня в своё время интересовал вопрос, как отключить сглаживание - так и не нашёл на него ответа. В конечном итоге перешёл на D3D7. Проблем с аппаратной поддержкой никаких - если карта умеет DDCAPS_BLTSTRETCH, то почти наверняка и D3D, и даже наоборот, некоторые (интегрированные на i810-815) могут выводить полигоны с текстурами, но не умеют масштабировать поверхности. Фильтрация легко включается/выключается.
С т.з. сложности реализации, если размеры поверхностей у вас меньше обычного макс. размера текстуры (2048*2048) - тоже никаких проблем, можете посмотреть вот это:
http://sapersky.narod.ru/files/D3D7_sprite_sample_04.rar
Если больше (или вам нужна работоспособность на старичках вроде TNT с их макс. 512*512), картинку нужно "порезать" на тайлы соотв. размера.
← →
Дмитрий Белькевич © (2008-04-15 00:55) [3]Спасибо. Интересная идея. Жаль, ограничения размеров не всегда приемлемы.
При разрезании на тайлы дырок между текстурами не получится? Или от карточек зависит?
← →
Sapersky (2008-04-15 18:29) [4]До сего момента пребывал в уверенности, что нет никаких дырок. Сейчас собрал пример:
http://sapersky.narod.ru/files/D3D7_image_tiling.rar
и обнаружил, что хоть и не "дырки", но стыки видны. Вряд ли виновата конретная карточка, скорее, причина - сам алгоритм билинейной фильтрации, не может он выбирать сэмплы из соседней текстуры, только из текущей.
Однако данный пример - экстремальный случай, текстура специально режется на мелкие тайлы 16*16; на практике, если использовать реальный макс. размер текстуры - стыки почти (а если масштаб при выводе <= 1 - то и совсем) не видны.
Кстати, у DDraw на некоторых картах (Радеоны, интеловские интегрированные) тоже имеются проблемы с масштабированием больших картинок. Работать работает, но начинаются немотивированные тормоза, такое ощущение, что драйвер частично переключается на софтвер. Видимо, DDraw-масштабирование в этих "железках" реализовано через наложение текстуры.
← →
Дмитрий Белькевич © (2008-04-15 21:35) [5]>До сего момента пребывал в уверенности, что нет никаких дырок
Я просто по игрушкам помню - часто дырки были заметны.
>Вряд ли виновата конретная карточка, скорее, причина - сам алгоритм билинейной фильтрации,
Пример еще не забирал, но скорее всего - из-за фильтрации проблемы. Из-за того, что краевые пиксели не с чем сглаживать.
>стыки почти (а если масштаб при выводе <= 1 - то и совсем) не видны.
У нас область весьма специфическая - медицина. Могут быть вопросы. Даже из-за одного пикселя посередине изображения. Было бы на самом крае - еще туда-сюда, на краях данных практически никогда не бывает.
Но вот в центре...
>Работать работает, но начинаются немотивированные тормоза, такое ощущение, что драйвер частично переключается на софтвер.
У нас были проблемы из-за того, что постоянно данные через агп шину приходилось гонять, а уже потом - масштабировать. Пришлось дописывать движок - делать дополнительный "слой", что бы большие картинки предварительно софтверно до размера окна вывода масштабировались, а затем - отображались.
Спасибо за участие в обсуждении, в любом случае...
← →
Sapersky (2008-04-16 20:32) [6]У нас область весьма специфическая - медицина. Могут быть вопросы. Даже из-за одного пикселя посередине изображения.
В принципе, можно попробовать побороться со стыками, например, делать вокруг каждой текстуры бордюр из пикселей соседей, потом как-то подкручивать текстурные координаты, задействовать альфа-блендинг...
Но более простым вариантом, наверное, будет использование в случае Висты софтверного масштабирования (FastLIB->FastSize.Bilinear, например), т.к. Виста автоматически подразумевает мощный компьютер, который с софтвером легко справится.
← →
Дмитрий Белькевич © (2008-04-16 22:43) [7]Sapersky, можно ли лично как-то связаться?
← →
Дмитрий Белькевич © (2008-04-17 00:01) [8]Нашел, отпишу - есть вопросы.
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2010.12.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.003 c