同じレンダーターゲットに複数のDirectWriteテキストオブジェクトがあり、そのうちの1つを一度に変換し、他のオブジェクトは変更しないようにしたい。Direct2Dには、いくつかのタイプの変換があります。
- ターゲット変換をレンダリングする
- ジオメトリ変換
- ブラシ変換
レンダリングターゲット変換は、その上のすべてのオブジェクトに影響するため、使用できません
テキストはジオメトリではなく、IDWriteTextLayoutの変換メソッドがないため、ジオメトリ変換を使用できません。
したがって、私にとっての唯一の選択肢はブラシ変換ですが、ソリッドブラシを使用して変換された長方形を描画しようとすると、元の場所に描画されます(以下のコードを参照)。sdkデモはビットマップブラシ変換の例を示しています。だから私の質問は:変換は他のタイプのブラシでも機能しますか?しっかりしたブラシのように?
これが私のコードです。まず、経過時間に基づいて変換マトリックスを計算し、次にこのマトリックスを使用してブラシを変換し、最後に長方形を描画します。見て、これが事実かどうか、または他の方法でそれを行うことができるかどうかを教えてください。
VOID CalculateTranslationMatrix(D2D1_MATRIX_3X2_F* matrix)
{
static float totalTime = 0.0f;
// Get start time
static DWORD startTime = timeGetTime();
// Get current time
DWORD currentTime = timeGetTime();
// Calculate time elapsed
float timeElapsed = (currentTime - startTime) * 0.001f;
// Accumulate total time elapsed
totalTime += timeElapsed;
// Build up the translation matrix
matrix->_11 = 1.0f;
matrix->_12 = 0.0f;
matrix->_21 = 0.0f;
matrix->_22 = 1.0f;
matrix->_31 = totalTime;
matrix->_32 = totalTime;
}
VOID DrawRectangle(HWND hwnd)
{
CreateD2DResource(hwnd) ;
g_pRenderTarget->BeginDraw() ;
// Clear background color to white
g_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
D2D1_MATRIX_3X2_F matrix;
CalculateTranslationMatrix(&matrix);
g_pBlackBrush->SetTransform(&matrix);
// Draw Rectangle
g_pRenderTarget->DrawRectangle(
D2D1::RectF(10.f, 10.f, 50.f, 50.f),
g_pBlackBrush
);
HRESULT hr = g_pRenderTarget->EndDraw() ;
if (FAILED(hr))
{
MessageBox(NULL, "Draw failed!", "Error", 0) ;
return ;
}
}