Странное поведение ID3DXLine при ширине линии 1,0 на некоторых машинах - PullRequest
0 голосов
/ 12 января 2012

У меня была эта проблема на нескольких машинах - почти всегда на ноутбуках, и я думаю, что обычно они с графическими чипсетами Intel, при использовании ID3DXLine.

У меня есть некоторый код, который выглядит примерно так:

MyLine->SetWidth(MyLineThickness);
MyLine->SetPattern(MyLinePattern);
MyLine->Begin();
{   
    ... Draw some lines with ->MyLine->Draw
}               
MyLine->End();

С MyLine, являющимся CComPtr (ID3DXLine). Когда MyLineThickness равен 1.0, эти машины рисуют толстые линии (выглядят так, как будто они нарисованы фломастером!). Когда я изменяю MyLineThickness на 1.1 или 1.5, я получаю красивые тонкие линии. Очевидно, увеличение этого значения до 8.f снова даст мне толстые линии.

Так что ID3DXLine на этих машинах, кажется, делает что-то действительно странное, когда толщина равна 1,0. При <1.f и> 1.f он, кажется, ведет себя так, как и следовало ожидать!

Кто-нибудь еще испытывал какие-либо странности в ID3DXLine? Я использую D3D 9.0c между SDK за февраль 2010 года.

1 Ответ

1 голос
/ 13 января 2012

В соответствии с документацией DX9 линии толщиной 1.0f нарисованы с использованием собственной аппаратной поддержки рисования линий, если таковая существует. Все остальные размеры рисуются путем создания пары треугольников и, следовательно, визуализируются с помощью вершинного шейдера. Попробуйте проверить D3DCAPS9::LineCaps на наличие поддерживаемых возможностей.

После некоторой игры с ID3DXLine я решил использовать DrawPrimitives для рисования линий - возможно, это немного медленнее, но, по крайней мере, вы получите такой же результат в любой системе.

...