【发布时间】:2018-07-19 16:27:55
【问题描述】:
(这与extracting scale matrix from modelview matrix 的问题类似)但我认为它更笼统,所以我重新发布它。
我在 WebGL 中有一个模型视图矩阵,由一系列从局部对象空间到世界空间的变换组成,然后是从世界空间到齐次 WebGL 坐标的变换(所有方向上从 -1 到 1)。
这个矩阵是在我们的代码中通过一系列复杂的步骤建立起来的。其中一个步骤是渲染到纹理,然后将纹理blit 到屏幕上。提取此过程以进行泛化,因此我们可以将其用于任何 2D 纹理绘制操作。不幸的是,它提供了自己的自己的视图/投影转换。在我调用它的时候,我只有组合的模型视图矩阵。
我想要做的是保留在模型视图矩阵上所做的转换,因为它是一路建立起来的,但我不想包括视图转换。换句话说,给定一个模型视图矩阵和一个已知视图变换,有没有办法将模型变换提取为一个矩阵?
我们没有使用透视投影,我们所有的变换本质上都是二维的,所以不需要通用的解决方案(虽然我之前在 3D 中工作时遇到过这个问题,所以可以扩展到 3D 将非常有用)。
【问题讨论】:
-
所以你是说你知道
V * M和V,你想得到M?那么它应该像inverse(V) * (V * M)一样简单。 -
补充@HolyBlackCat 所说的话,如果您不知道
V,那么您就不走运了。这与说 A = 11,B = 12 没有什么不同。给定数字 23 并且不知道 A 或 B 是什么 A。不知道 V,您就无法知道派生 M。如果您知道 V,尽管您可以将其删除为 @提到了HolyBlackCat。 -
@HolyBlackCat 模型视图持有
Inverse(V)*MV在那里反转!!! -
我确实知道视图矩阵,所以这是一个可能的选择。