计算矩阵以在子画面上获得当前的紫外线

时间:2019-01-28 02:02:11

标签: matrix

对于不熟悉的人来说,UV是矩形精灵的一种标准化坐标。因此,子画面的左下角。所以像

(0, 1)   (1, 1)
   -------
  |       |
   -------
(0, 0)   (1, 0)

这些坐标不会改变精灵旋转,缩放或改变其旋转中心的方式。

我的目标是在屏幕空间上给定一点的情况下,将UV放置在精灵上。我可以做一些有趣的事情,例如确定一个点在精灵上还是在精灵上。

为此,我涉及的线性代数有很多麻烦。

所以这是我到目前为止所做的工作。在此应用程序中,所有内容均为2D,但是我为所有内容使用3x3矩阵,以便我可以正确表示转换。每次我对2D点进行操作时,都会像z vec3(v.x, v.y, 1.0)这样用z坐标填充它,以便可以相乘。

我们有以下坐标空间:

  • 归一化屏幕空间:用于最终渲染的[-1,1]空间
  • 屏幕空间:是虚拟世界的空间,其起源位于左上方
  • 触摸空间:是触摸系统的空间
  • 接口空间:是接口对象的空间
  • X Space:是精灵的UV的空间

到目前为止,我已经创建了以下3x3矩阵:

  • A:从触摸空间转换为标准屏幕空间
  • B:从界面空间转换为触摸空间
  • C:从触摸空间转换为界面空间
  • L:将UV空间中的矩形*转换为精灵X的界面空间

*此矩形只是每个对象都相同的[(0,0),(1、0),(0、1),(1、1)]矩形。只是每个精灵都会翻译。

因此,从该矩形对精灵x上的点p的变换是:

p * L * A

我想出了最棘手的时间来解决矩阵M,这个矩阵应该从Touch Space转换为X Space。

有几个原因。

对此我感到非常困惑,因为无论您是vector * Matrix还是Matrix * vector,结果似乎都是不同的。我不知道哪一个是正确的。

0 个答案:

没有答案