【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 方向の半径 (radiusX
と radiusY
) を表しています。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()の値を入れることで、平行移動変換マトリクスを作成して、それを使用して座標変換して表示してくれています。