Войти
ПрограммированиеФорумГрафика

[D3D11]Странное отсечение текстуры

Страницы: 1 2 Следующая »
#0
17:10, 17 янв. 2018

Добрый день, столкнулся с еще одной странной проблемой, вывожу bitmap шрифты аналогично тому, как я делаю это для D3D9, но получаю странный результат
font_pixel | [D3D11]Странное отсечение текстуры
Как видно с картинки низ шрифта обрезается (иногда и боковина тоже, но гораздо реже), на картинке я навел на пиксель 564 по высоте, как видно из истории в него ничего не записано, хотя если судить по вершинам - геометрия там есть
font_vertex | [D3D11]Странное отсечение текстуры
Вот такой код для семплера

  samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT;
  samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP;
  samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP;
  samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP;
  samplerDesc.MipLODBias = 0.0f;
  samplerDesc.MaxAnisotropy = 4;
  samplerDesc.ComparisonFunc = D3D11_COMPARISON_ALWAYS;
  samplerDesc.BorderColor[0] = 0;
  samplerDesc.BorderColor[1] = 0;
  samplerDesc.BorderColor[2] = 0;
  samplerDesc.BorderColor[3] = 0;
  samplerDesc.MinLOD = 0;
  samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;

Подкиньте идей, что это может быть.


#1
17:45, 17 янв. 2018

Текстуры не кратные двойке? Хотя уже вижу что не кратные, в общем скорее всего если ты грузил ее средствами d3d то ее размер был автоматом дополнен до кратности 2 и текстурные координаты нужно задать с учетом нового размера.

#2
17:46, 17 янв. 2018

Aroch
> Текстуры не кратные двойке?
Кратные, dds 32 bit

#3
17:48, 17 янв. 2018

Osiris
у тебя высота 768, она достраивается до 1024

#4
17:49, 17 янв. 2018

Aroch
> у тебя высота 768, она достраивается до 1024
Ты имеешь ввиду backbuffer RT?

#5
17:57, 17 янв. 2018

Osiris
> Ты имеешь ввиду backbuffer RT?
если это к backbuffer'u относилось то пофиг. Но проблема всё равно в неверных текстурных координатах.

#6
17:59, 17 янв. 2018

Aroch
> Но проблема всё равно в неверных текстурных координатах.
Они верные, сейчас перепроверю еще раз

#7
18:01, 17 янв. 2018

Вершинный шейдер почему-то не стартует в отладчике, но входные вершинные координаты верные

#8
18:15, 17 янв. 2018

Osiris
Предлагаешь верить на слово? Ошибка в один пиксель запросто может дать то что у тебя на выходе.

#9
18:26, 17 янв. 2018

Как выглядит символ 'А' в DDS ?

#10
18:32, 17 янв. 2018

bykabak
> Как выглядит символ 'А' в DDS ?
font_utf8_bodonitown_18px_0

Aroch
> Предлагаешь верить на слово? Ошибка в один пиксель запросто может дать то что у
> тебя на выходе.
Предлагаю читать внимательно, геометрия на один пиксель ниже, чем изображение, можешь глянуть текстуру выше, как там нужно ошибиться, чтобы получить четкий срез?
Кроме того расчет координат такой же для D3D9

Входные данные точные, вот что там дальше творится - тут я не могу утверждать ничего.

#11
19:34, 17 янв. 2018

Текстурные координаты начала каждого символа - U, левый верхний угол, - верные. Но правый нижний угол - V чуть сбиты на несколько пиклелей. Попробуй принудительно добавить к координатам конца символа по V , по пару пикселей  и посмотри что получится. Тогда можно будет судить.

Как у тебя рассчитываются текстурные координаты символа ?

#12
19:53, 17 янв. 2018

bykabak
>Попробуй принудительно добавить к координатам конца символа по V
Спасибо натолкнул на мысль, вот что вышло
uv | [D3D11]Странное отсечение текстуры

Походу это как-то связано с фильтрацией, потому что кажется что обрабатывает он по 2 пикселя

#13
20:17, 17 янв. 2018
linear | [D3D11]Странное отсечение текстуры

А вот линейная фильтрация +1 pixel на размер в обе стороны
#14
20:23, 17 янв. 2018

Попробуй без фильтрации

  samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
  samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
  samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
  samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
  samplerDesc.MipLODBias = 0.0f;
  samplerDesc.MaxAnisotropy = 0;
  samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
  samplerDesc.BorderColor[0] = 0;
  samplerDesc.BorderColor[1] = 0;
  samplerDesc.BorderColor[2] = 0;
  samplerDesc.BorderColor[3] = 0;
  samplerDesc.MinLOD = 0;
  samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

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