2016-08-17 25 views
1

我正在使用Direct2d(DirectX11)在C++中處理圖形應用程序。該應用程序接收傳感器數據,並使用並排放置在x軸(代表時間)的矩形顯示輸入。每個矩形都填充有線性漸變畫筆,該畫筆表示沿y軸顯示的離散時間間隔的多個傳感器讀數。 當獲得讀數時,下一個矩形的開始'x'位置的位置應該正好在最後一個完成的位置,即rect1.right應該是rect2.left。用於每個矩形的起點被使用下面的僞碼計算:使用DirectX11的Direct2D繪圖:在顯示圖形上對齊矩形

//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

在繪製矩形時,不能通過設置適當的抗混疊模式來解決這個問題嗎?

pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);