剪切/reflection/放大如何用4x4matrix表示?

我明白,4×4matrix可以表示一个3d点(表示为x,y,z,w)

例如,翻译是

[1 0 0 0] [0 1 0 0] [0 0 1 0] [xyz 1] 

其中x,y和z是沿每个轴移动点的量。

我知道如何表示平移,缩放和旋转,但其他变换如剪切(具有任何不变平面和剪切因子),reflection(在任何平面中)和扩大(以任何中心和任何比例因子)表示?

最终目标是让c ++函数创建一个转换matrix。 例如:

 Matrix4x4.generateReflection(Vector3d planeNormal); Matrix4x4.generateEnlargment(float centerX, float centerY, float centerZ, float scaleFactor); 

这些将返回一个Matrix4x4类的实例,其中设置的元素使得它乘以一个点返回剪切/reflection/放大的点。

如果我正确理解你的问题,你正在寻找关于为特定的更复杂转换而建立matrix的指导。 标准的配方是这样的:

  • 确定翻译到新的来源,并建立这个翻译同质matrix。
  • 确定每个基vector(沿每个轴相对于新原点的单位vector)将被映射到相对于新原点的位置。 这些结果的向量将是所得到的非平移均匀matrix分量的列。
  • 将平移matrix和非平移matrix相乘以获得networking变换matrix。 请注意按照正确的顺序执行此操作,具体取决于向量是预先应用于matrix的行向量,还是应用于matrix的列向量。