在 Direct2D 中使用单位矩阵乘法 - 为什么?
Multiplication with identity matrix in Direct2D - why?
我正在使用C++。我在MSDN上看到了下面的代码[here](-here I should add the link-)
:
m_pRenderTarget->BeginDraw();
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
我想知道为什么它们会与单位矩阵相乘。它不会进行任何更改:I * A = A
如果A * B = C
.I * C = C
,不是C * I = A
,所以它不是C * I = A
,但我的朋友说如果我SetTransform(identity)
,渲染目标就会变成初始状态。
为什么它们与单位矩阵相乘?
我在这里看到这个语法是在想要删除当前转换时使用
的他们说如果你有:
pRenderTarget->SetTransform(
D2D1::Matrix3x2F::Rotation(20, D2D1::Point2F(100,100)));
转换将应用于所有后续绘制操作,直到您再次调用
SetTransform
。若要删除当前转换,请使用单位矩阵调用SetTransform
,该矩阵由Matrix3x2F::Identity
函数返回。
pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
初始转换可能为零,也可能是垃圾(未初始化),甚至可能是标识,但我们不知道。因此,应将其设置为标识,以便知道转换是什么。无论初始转换实际上是什么,您都应该假设它是单位化的,并在使用它之前为其分配一个值。
SetTransform
不应该与MultiplyTransform
(不存在)之类的东西混淆。您正在设置转换,而不是追加到转换。在 Direct2D 中,由你执行推送/弹出样式的矩阵操作。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么在全局范围内使用"extern int a"似乎不行?
- 为什么在popback()操作之后,它仍然打印完整的矢量
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 为什么会发生堆损坏
- 为什么使用 "this" 指针调用派生成员函数?
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么比较运算符如此快速
- 为什么 Serial.println(<char[]>);返回随机字符?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 为什么不;名字在地图上是按顺序排列的吗
- 我的字符计数代码计算错误.为什么
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 为什么 std::unique 不调用 std::sort?
- 在 Direct2D 中使用单位矩阵乘法 - 为什么?
- Direct2D --- 为什么画笔资源绑定到各个 Direct2D 呈现目标