ID3DXLine在某些机器上线宽为1.0时的奇怪行为

时间:2012-01-12 15:57:54

标签: line direct3d

我现在已经在几台机器上出现了这个问题 - 几乎总是笔记本电脑,我认为通常使用英特尔图形芯片组时,使用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左右会再次给我粗线。

因此,当厚度为1.0时,这些机器上的ID3DXLine似乎做了一些非常奇怪的事情。在< 1.f和> 1.f它似乎表现得像你期望的那样!

有没有其他人在ID3DXLine中遇到任何陌生感?我正在使用D3D 9.0c btw,以及2010年2月的SDK。

1 个答案:

答案 0 :(得分:1)

根据DX9文档,厚度1.0f的线条使用本机硬件线条图支持(如果存在)绘制。所有其他尺寸都是通过生成一对三角形绘制的,因此通过顶点着色器渲染。请尝试检查D3DCAPS9::LineCaps以获取支持的功能。

在玩ID3DXLine之后,我决定使用DrawPrimitives绘制线条 - 它可能有点慢,但至少在任何系统上都会得到相同的结果。