2016-08-17 8 views
1

Direct2d (DirectX11)를 사용하는 C++의 그래픽 응용 프로그램에서 작업 중입니다. 응용 프로그램은 센서 데이터를 가져 와서 x 축 (시간을 나타냄)을 가로 질러 나란히 배치 된 사각형을 사용하여 입력을 표시합니다. 각 직사각형은 Y 축을 따라 표시되는 이산 시간 간격에서 여러 센서 판독 값을 나타내는 선형 그래디언트 브러시로 채워집니다. 판독 값을 얻으면 다음 직사각형의 시작 'x'위치에 대한 배치가 정확히 마지막 위치가 완료되어야합니다. 즉, rect1.right는 rect2.left이어야합니다. 각 RECT의 시작 지점은 아래 의사 코드를 사용하여 계산됩니다Direct2D 드로잉 DirectX11 : 디스플레이 그래프에 직사각형 정렬

//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 축의 길이를 사각형 수의 배수 인 숫자로 제한하며, 각 사각형의 길이에 X를 곱한 값입니다. 이것은 응용 프로그램의 다른 모든 요소에서 사용할 수있는 영역에 영향을줍니다. 증분 값이 정수가 아닌 다른 값인 경우 직사각형 사이에 작은 검은 선이 나타나 모양을 손상시키고 데이터를 훨씬 더 해석하기 어렵게 만듭니다. 왜 이것이 원칙적으로 발생하는지 알 수 있습니다. 예를 들어 픽셀의 일부만 표시 할 수는 없지만 축의 길이에 관계없이 사각형이 항상 정확히 일치하도록 올바르게 수행해야합니다. Direct2D는 이것에 완벽하고, 분수 값을 실제 픽셀에 정확하게 매핑해야한다. 그러나 x 축의 길이를 고정시켜야하는 현재의 단순한 해결책으로는 정확한 접근법이 무엇인지 모른다. (필자는 적절하게 확장 할 수없고 다른 요소는 수평으로 충분한 공간을 갖지 못함을 의미).

올바른 방향으로 어떤 포인터를 주시면 감사하겠습니다!

답변

1

사각형을 그릴 때 적절한 앤티 앨리어스 모드를 설정하여이 문제를 해결할 수 없습니까?

pRenderTarget->SetAntialiasMode(D2D1_ANTIALIAS_MODE_ALIASED);