【DIRECTX】DIRECT2Dを試す、その6(楕円を描く)

【DirectX】DIRECT2Dを試す、その5(直線を引く) | 自分、ぼっちですが何か? (taki-lab.site)

今回は楕円を描きます。

これまで通り、D2D_drawing()を修正します。

void D2D_drawing(ID2D1HwndRenderTarget* pRT)
{
	pRT->BeginDraw();
	pRT->Clear(D2D1::ColorF(D2D1::ColorF::White));

	ID2D1SolidColorBrush* mybrush;
	pRT->CreateSolidColorBrush(
		D2D1::ColorF(D2D1::ColorF::Black, 1.0f),
		&mybrush);
	D2D1_ELLIPSE ellipse = D2D1::Ellipse(D2D1::Point2F(100.0f, 100.0f), 75.0f, 10.0f);
	pRT->SetTransform(D2D1::Matrix3x2F::Translation(0, 0));
	pRT->FillEllipse(ellipse, mybrush);
	pRT->SetTransform(D2D1::Matrix3x2F::Translation(200, 10));
	pRT->DrawEllipse(ellipse, mybrush, 1.0f);

	pRT->EndDraw();
}

まず、構造体D2D1_ELLIPSEなんですが、このように定義されています。

typedef struct D2D1_ELLIPSE {
    D2D1_POINT_2F point;
    float radiusX;
    float radiusY;
} D2D1_ELLIPSE;

この構造体は、中心座標 (point) と、 X 方向と Y 方向の半径 (radiusXradiusY) を表しています。X 方向と Y 方向の半径が等しい場合は、円を表します。

楕円を描くときは、DrawEllipse()を、塗りつぶした楕円を描くときはFillEllipse()を使用します。

void DrawEllipse(
  const D2D1_ELLIPSE &ellipse,
  ID2D1Brush *brush,
  FLOAT strokeWidth = 1.0f,
  ID2D1StrokeStyle *strokeStyle = NULL
);
  • ellipse: 描画する楕円を表す D2D1_ELLIPSE 構造体の参照。
  • brush: 描画に使用するブラシのポインタ。このブラシを使用して、楕円の塗りつぶし色を指定します。
  • strokeWidth (省略可能): 楕円の輪郭線の太さを表す浮動小数点値。デフォルト値は 1.0 です。
  • strokeStyle (省略可能): 楕円の輪郭線のスタイルを指定するための ID2D1StrokeStyle インタフェースへのポインタ。デフォルト値は NULL です。
HRESULT FillEllipse(
  D2D1_ELLIPSE ellipse,
  ID2D1Brush *brush,
  FLOAT strokeWidth = 1.0f,
  ID2D1StrokeStyle *strokeStyle = NULL
);

パラメータはDrawEllipse()と同じですね。

SetTransform()は図形の表示位置を設定しています。

第二パラメータにTranslation()の値を入れることで、平行移動変換マトリクスを作成して、それを使用して座標変換して表示してくれています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください