使用DirectXTK / DirectXmath转换平面
Transforming a plane with DirectXTK / DirectXMath
我有一个由三个点定义的3D平面,我想使用directxtk使用4x4矩阵进行转换。
我尝试了两种方法:
-
用平面:: transform()方法转换平面 - 这给出了非常奇怪的结果。
-
转换三个点并从转换点创建一个平面 - 这可以正常工作。
我还试图在调用平面:: transform()之前对矩阵进行转置,并且它使平面正常,但是常数是错误的(加上对我来说,将矩阵转换确实没有意义)。
>void TestPlaneTransform()
{
Vector3 p1(-2.4f, -2.0f, -0.2f);
Vector3 p2(p1.x, p1.y + 1, p1.z);
Vector3 p3(p1.x, p1.y, p1.z + 1);
Plane plane(p1, p2, p3);
Matrix m = Matrix::CreateTranslation(-4, -3, -2);
// transform plane with matrix
Plane result1 = Plane::Transform(plane, m);
// transform plane with transposed matrix
Plane result2 = Plane::Transform(plane, m.Transpose());
// transform points with matrix
Vector3 t1 = Vector3::Transform(p1, m);
Vector3 t2 = Vector3::Transform(p2, m);
Vector3 t3 = Vector3::Transform(p3, m);
// plane from transformed points
Plane result3(t1, t2, t3);
result1.Normalize();
result2.Normalize();
result3.Normalize();
}
这是归一化后的结果:
result1 x:-0.704918027 y:-0.590163946 z:-0.393442601 w:0.196721300
result2 x:1.00000000 y:0.000000000 z:0.000000000 w:-1.59999990
result3 x:1.00000000 y:0.000000000 z:0.000000000 w:6.40000010
plane :: transform()调用Xmplanetransform,它是DirectXmath库的一部分,其文档简单地说"通过给定矩阵转换平面。"。我猜该方法很好,但是我的代码怎么了?
由于您在Directxtk Plane
上调用Transform
,因此似乎不需要在呼叫之前对其进行归一化。但是Plane::Transform
的Directxtk Wiki表示:
平面应由矩阵的反向转置进行转换,矩阵的对于纯旋转而言,它的矩阵与原始矩阵相同。
github.com/microsoft/directxtk/wiki/plane
来自规格:
归一化平面转换。该平面必须已经归一化,以使其正常向量为单位长度,然后在称为此方法。
用未归一化的平面调用此方法,我想会产生一种垃圾。所以我先将飞机正常化,然后再次检查。
plane.transform方法(平面,矩阵)
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 如何在不复制数据的情况下在平面数组和多维数组之间进行转换?
- 在 Linux 中将 UTF-32 宽字符转换为 UTF-16 宽字符以获取补充平面字符
- 使用DirectXTK / DirectXmath转换平面
- 如何将平面网格转换为CGAL的布置
- 将点云的坐标转换为点云库中的另一个坐标,从而使地平面成为X-O-Y平面?
- 如何将平面列表合并转换为层次结构字符串
- 用于将类别树转换为平面列表的算法
- ffmpeg:sws_scale在RGB到YUV420转换期间在平面V中返回错误值