Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

Повышение качества текстуры   Найти похожие ветки 

 
Kobik..   (2006-06-09 09:08) [0]

Суть проблемы:
есть маленькая текстурка (ну например 32х32). Ее надо натянуть на квадрат 128х128.
Естественно все получается квадратным, что не красиво.
вроде специально для этого придумана фильрация

 FD3DDevice.SetTextureStageState(0,D3DTSS_MAGFILTER, D3DTEXF_GAUSSIANCUBIC);
 FD3DDevice.SetTextureStageState(0,D3DTSS_MINFILTER, D3DTEXF_GAUSSIANCUBIC);

И на сплошных текстурах она работает хорошо. Но если на текстуре, например, нарисован юнит на прозрачном фоне, то на краях квадрата появляются полосы (непрозрачного цвета прозрачности).
Ну т.е если прозрачный цвет был $00A0A0A0, то полосы будут серыми.

Можно ли как-то это исправить?


 
tButton ©   (2006-06-09 09:37) [1]


> И на сплошных текстурах она работает хорошо. Но если на
> текстуре, например, нарисован юнит на прозрачном фоне, то
> на краях квадрата появляются полосы (непрозрачного цвета
> прозрачности).
> Ну т.е если прозрачный цвет был $00A0A0A0, то полосы будут
> серыми.
>
> Можно ли как-то это исправить?

использовать 32битные текстуры
с прозрачностью в отдельном канале


 
Kobik..   (2006-06-09 10:17) [2]

>использовать 32битные текстуры
>с прозрачностью в отдельном канале

формат текстуры D3DFMT_A8R8G8B8
это разве не 32 битная?


 
tButton ©   (2006-06-09 10:53) [3]


> формат текстуры D3DFMT_A8R8G8B8
> это разве не 32 битная?

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


 
Kobik..   (2006-06-09 12:25) [4]

2tButton
спс, но вопрос в основном не об этом.
Касяк возникает не на границе юнита, а на границе квадрата, т.е. рамке текстуры, причем там, где нет соприкосновения с юнитом.

Сейчас только заметил - косяк только если юнит соприкачается с границей, а он у меня как раз вписывается в 32*32. эээ опять криво объясняю :) На скриншоте будет плохо видно, поэтому попытаюсь изобразить так:


0 - прозрачность
1 - нужный цвет
2 - нужный размазанный цвет
3 - глюк

вот картинка до фильтрации

00011000
00011000
00010000
01111110

после фильтрации

00211233
00211203
02212003
21111112



Ну это так, грубо говоря :) Собственно вопрос - откуда бурутся 3, если они даже не соприкасаются с 1.


 
Kobik..   (2006-06-09 12:35) [5]

поэксперементировав с разными текстурами понял закономерность: низ картинки переносится наверх, но изначальная текстура нормальная. Т.е. баг исключительно после фильтрации

до:
000000
000000
001100
010110

после:
030330
000000
001100
010110


 
Sapersky   (2006-06-09 12:49) [6]

D3DTEXF_GAUSSIANCUBIC

Интересно, что за видеокарта? Я думал, это чудо вообще нигде не реализовано.
Может, она на самом деле анизотропную (в случае 2D фактически обычную билинейную) делает :)

низ картинки переносится наверх

Подобные эффекты обсуждались здесь:
http://delphimaster.net/view/9-1134361287/


 
a22 ©   (2006-06-09 15:49) [7]

можно попробовать сместить текстурные координаты к центру (как в ветке [6] обсуждалось), но думается мне, это не поможет. попробуй картинку увеличить (все же вчетверо растягивается) или фильтрацию отключить. по-другому, думаю, делу не помочь


 
MeF Dei Corvi ©   (2006-06-09 18:59) [8]

Какой смысл? Дополнительную информацию всё-равно взять негде... Ну будет текстура не квадратная, а размытая, всё-равно же ничего не различить на ней, особенно в случае с юнитом.


 
Kobik..   (2006-06-09 19:21) [9]

>Какой смысл?
Суть такая - делаю ремейк MSX игры 1985 года.

Графику я не хочу менять принципиально, а вот сгладить было бы не лишним, т.к. то, что в оригинале при разрешении 256*192 да еще на телевизоре выглядело линией под 45 градусов сейчас на большом мониторе похоже на лесенку. =)

Спрайты там 32х32.

Пока нашел единственный выход - делать текстуры 64х64, помещая картинку в центр...

PS. Отличий между GAUSSIANCUBIC и даже просто D3DTEXF_LINEAR я не заметил (ну скорее всего т.к. у меня видяха старая)


 
Kobik..   (2006-06-09 19:26) [10]

ага. Идею понял. Спасибо.
Пошел испытывать


 
Kobik..   (2006-06-09 19:52) [11]

Смещение текстурных координат чуть больше чем на пол пикселя (т.е. в моем случае на 0.016 с каждой стороны) помогло.

Всем спасибо за скорую помощь ;)


 
ViK ©   (2006-06-11 14:12) [12]

На GameDev.ru есть статья "Алгоритм сглаживания Smart Filtering"
С помощью данного алгоритма можно существенно увеличить размеры текстуры без образования "квадратов". Единственный недостаток метода - он полностью программный.

http://www.gamedev.ru/articles/?id=30101
Ссылка может быть устаревшей, но можно поискать по названии статьи.



Страницы: 1 вся ветка

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.044 c
8-1157439275
ников
2006-09-05 10:54
2007.05.20
скорость мультипликации


1-1174372662
JIuSS
2007-03-20 09:37
2007.05.20
Воод чисел с разделителями тысяч


15-1176947967
VirEx
2007-04-19 05:59
2007.05.20
Все сущее - философия.материализм.моя теория


2-1177954939
redlord
2007-04-30 21:42
2007.05.20
совместное использование данных несколикими потоками


2-1177618625
VVR
2007-04-27 00:17
2007.05.20
Открытие и закрытие дисковода