【问题标题】:Direct2D Drawing with DirectX11: Aligning rectangles on a display graph使用 DirectX11 进行 Direct2D 绘图:在显示图形上对齐矩形
【发布时间】:2016-08-17 11:33:33
【问题描述】:

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

//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 轴的长度固定(这意味着我无法正确缩放,并且其他元素在水平方向上没有足够的空间)。

任何指向正确方向的指针将不胜感激!

【问题讨论】:

    标签: c++ graph direct2d lineargradientbrush


    【解决方案1】:

    在绘制矩形时设置适当的抗锯齿模式不能解决这个问题吗?

    pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);
    

    【讨论】:

      猜你喜欢
      • 2016-09-14
      • 2017-06-20
      • 1970-01-01
      • 2022-08-06
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 1970-01-01
      相关资源
      最近更新 更多