Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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
C++ 转换的最快方式(移动、旋转、缩放)_C++_C_Algorithm_Graphics_Vector - Fatal编程技术网

C++ 转换的最快方式(移动、旋转、缩放)

C++ 转换的最快方式(移动、旋转、缩放),c++,c,algorithm,graphics,vector,C++,C,Algorithm,Graphics,Vector,我在看一个叫做CreativeDocs.Net的矢量绘图应用程序。我注意到,我可以有数百个形状,移动、旋转和缩放完全不滞后。鉴于必须修改所有垂直,应用程序通常如何尽快完成这些转换 感谢一种典型的方法是对坐标应用3x3(或3x2或2x3)仿射变换矩阵,它可以描述位置、旋转、缩放和剪切 如果使用OpenGL或Direct3D,则可以使用图形硬件为您执行实际转换 如果您在软件中执行此操作,则光栅可能会成为瓶颈,而不是变换顶点。通常这是通过变换矩阵完成的。这样可以相当快地变换各个点,这是大多数二维(和三

我在看一个叫做CreativeDocs.Net的矢量绘图应用程序。我注意到,我可以有数百个形状,移动、旋转和缩放完全不滞后。鉴于必须修改所有垂直,应用程序通常如何尽快完成这些转换


感谢

一种典型的方法是对坐标应用3x3(或3x2或2x3)仿射变换矩阵,它可以描述位置、旋转、缩放和剪切

如果使用OpenGL或Direct3D,则可以使用图形硬件为您执行实际转换


如果您在软件中执行此操作,则光栅可能会成为瓶颈,而不是变换顶点。

通常这是通过变换矩阵完成的。这样可以相当快地变换各个点,这是大多数二维(和三维)矢量图形使用的最常用技术


特别是,该应用程序构建在一个相当高性能的开源2D渲染引擎之上。它提供了许多可用于此类应用的“原语”。

除了使用矩阵模拟仿射变换(带平移的线性变换)之外,您可能还对使用来执行R3中的这些操作感兴趣。

Cairo()是另一个类似于反粒度几何体的库。例如,它在Gtk+中使用。是否始终应用该矩阵?例如:我从(50,50)开始,然后不断地重新应用转换?@user146780:在OpenGL中,矩阵作为状态应用。因此,当您应用转换时,它将继续应用,直到应用另一个转换或矩阵加载标识为止。@user146780:不完全确定您的意思,但如果更改转换(或顶点),则必须重新转换顶点,是的。如果你有一个顶点x=(a,b,1)^T你就得到了变换后的顶点x'=M*x,其中M是一个3x3矩阵。M中的前两个柱表示旋转和缩放,第三个柱表示平移。x中的最后一个元素是1表示点,0表示向量。推导二维点的2x2旋转矩阵是一个非常有趣且简单的练习@user146780是的,矩阵不断地被重新应用,但这并不意味着你的形状会在屏幕上移动,因为你正在使用一个转换矩阵。这是因为图形顶点由gpu使用矩阵进行变换、绘制然后丢弃。因此,在每个帧的开始处,顶点总是在其自身的局部坐标系中开始未转换。