2016-08-17 34 views
1

C++のグラフィカルアプリケーションでDirect2d(DirectX11)を使用して作業しています。アプリケーションはセンサデータを取り込み、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); 
関連する問題