В настоящее время я изучаю DirectX (SDK от июня 2010 г.) и рисую растровые изображения на экране. Теперь я хочу иметь возможность выполнять преобразования на этих изображениях и не отображать изображения вдоль оси x или y.
Перед рисованием я могу установить матрицу преобразования, которая будет применяться к операциям рисования. Хотя DirectX использует тип D2D1_MATRIX_3x2_F, согласно MSDN, только 2x2 часть этой матрицы используется для преобразований. Например, матрица {[1, 0], [0, 1], [0, 0]} - это единичная матрица, которая заставляет все отображаться естественным образом.
Насколько я понимаю, преобразование матрицы для зеркального отображения моего изображения вдоль оси x должно выглядеть следующим образом: {[1, 0], [0, -1], [0, 0]} и вдоль y ось это тогда будет {[-1, 0], [0, 1], [0, 0]}. Однако, если я использую эти матрицы для преобразования, я получаю черный экран.
Проблема для меня в том, что я застрял на этом этапе, не зная, чем может быть вызвана эта проблема, или, скорее, вызвана ли она логической ошибкой в математике, стоящей за этим, или самой реализацией. К сожалению, я не смог найти никакого материала по этому поводу, кроме однострочного комментария о том, что «зеркальное отображение должно выполняться с матричными преобразованиями» в заголовочном файле Direct2D RenderTarget.
Исходный код, который я сейчас использую для тестирования:
D2D1_MATRIX_3X2_F m;
m._11 = 1; m._12 = 0;
m._21 = 0; m._22 = -1;
m._31 = 0; m._32 = 0;
m_pDX2DRenderTarget->SetTransform( m );