1

我正在尝试从投影矩阵计算缩放百分比。只要图像不旋转,以下代码就可以工作:

void UpdateZoomPercent()
{
    var zoom = _projMatrix.M11 * glControl.Width / 2; // M11 is the top left value
    lblZoomPercent.Text = (zoom * 100).ToString("G3") + "%";
}

本质上,它只需要 X 比例,然后将其乘以到视口。X 和 Y 总是按比例缩放,所以我不需要看 Y。我的场景是 2D。

我如何考虑轮换?

4

1 回答 1

2

考虑一个构成笛卡尔坐标系基础的实数值矩阵。每列代表一个基向量。在等距缩放的情况下,所有基向量都具有相同的长度。令 C(M,n) 表示矩阵 M 的第 n 列向量,即 C(M,n) = M_n,j,那么对于等距缩放,它将是 len(C(M,0)) = len( C(M,1)) = len(C(M,…)),其中 len(v) = sqrt(v·v)

在等距缩放的情况下,基向量的长度会有所不同,这就是您可以用来检测这种情况的方法。

在计算机图形学中,您遇到的矩阵是同质的,以允许单个矩阵表示它们所代表的空间内的所有可能的变换。齐次矩阵有 N+1 行和列,其中 N 是它们所代表的坐标空间的维数。按照惯例(至少在所有流行的计算机图形软件中)左上部分(即 M_i,j 其中 i 和 j 在 1…N,基于 1 的索引中)形成基向量,而第 N 列和第 N 行形成同质部分.

因此,在 OpenGL 的情况下,您会将左上角的 3×3 子矩阵视为坐标基向量。而且由于 OpenGL 索引列的主要顺序,您不必重新排序从 OpenGL 检索到的内容。

于 2013-03-09T20:07:00.253 回答