使用DirectX11进行Direct2D绘图:在显示图形上对齐矩形

时间:2016-08-17 11:33:33

标签: c++ graph direct2d lineargradientbrush

我正在使用Direct2d(DirectX11)在C ++中使用图形应用程序。应用程序接收传感器数据并使用矩形在x轴(表示时间)上并排放置显示输入。每个矩形都填充有线性渐变画笔,该画笔表示沿y轴显示的离散时间间隔的多个传感器读数。 获取读数时,下一个矩形的起始'x'位置的位置应该与最后一个矩形完全相同,即rect1.right应该是rect2.left。每个rect的起点使用下面的伪代码计算:

//find the number of rectangles needed to represent the time scale (rects must be an integer, as we cannot display partial rectangles
int nNumXRects = fAxisLength/fTimeDivision;

//calculate the X-axis increment for each rectangle
float fXIncrement = fXAxisLineLength/(float)NumXRects;

//Get the next x position
rect2.left = rect1.right;
rect2.right = rect2.left + fXIncrement;

我的问题是,当fXIncrement的值恰好是整数时,图表才会正确显示,例如3.0F。这显然将X轴的长度限制为矩形数量的倍数的数字,乘以每个矩形的长度。这会影响应用程序的所有其他元素可用的区域。 如果增量的值是整数的其他值,则在矩形之间出现小的黑线,这会破坏外观并使数据更难以解释。我意识到为什么这种情况原则上发生了 - 例如我们不能显示像素的一小部分,但是如何正确地完成它以使矩形总是精确匹配,而不管轴的长度如何?似乎Direct2D对此非常完美,并且本质上应该精确地处理将小数值映射到物理像素,但是我不知道正确的方法是什么超出当前的简化解决方案,即保持x轴的长度固定(意思是我无法正确缩放,而其他元素在水平方向上没有足够的空间)。

任何指向正确方向的人都会非常感激!

1 个答案:

答案 0 :(得分:1)

在绘制矩形时,可以通过设置适当的抗锯齿模式来解决这个问题吗?

pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
相关问题