Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 如何";撤销;旋转以获得适当的缩放?_Math_Opengl_Matrix - Fatal编程技术网

Math 如何";撤销;旋转以获得适当的缩放?

Math 如何";撤销;旋转以获得适当的缩放?,math,opengl,matrix,Math,Opengl,Matrix,我试图从投影矩阵计算缩放百分比。只要图像不旋转,以下代码就可以工作: 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。

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

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


如何考虑旋转?

考虑构成笛卡尔坐标系基础的实值矩阵。每列表示一个基向量。在等轴测缩放的情况下,所有基向量都具有相同的长度。设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检索的内容。

我知道“W”维度,但我不太确定如何处理左上3x3子矩阵(或2x2,因为我们在2D中工作)。M(0,0)和M(1,1)用于缩放和旋转,我不知道如何重新计算旋转。@Mark:不必“计算”旋转。只需计算子矩阵列向量的长度,这就是比例因子。哦!我想我没有跟上。非常好,谢谢:-)