2010-07-08 84 views
2

我在看這個叫做Creative Docs .Net的矢量繪圖應用程序。我注意到,我可以擁有數百個形狀,而且移動,旋轉和縮放不會滯後。鑑於所有頂點必須被修改,應用程序通常如何儘可能快地完成這些轉換?做轉換的最快方式(移動,旋轉,縮放)

由於

回答

2

一種典型的方法來做到這一點是3×3(或者3×2,或2×3)的仿射變換矩陣應用到的座標,其可描述之類的東西的位置,旋轉,縮放和剪切。

如果您使用OpenGL或Direct3D,則可以使用圖形硬件爲您進行實際轉換。

如果你是用軟件做的話,可能會成爲瓶頸,而不是變換頂點。

+0

是否總是應用矩陣?例如:我從(50,50)開始,然後不斷重新應用轉換? – jmasterx 2010-07-08 00:36:17

+0

@ user146780:在OpenGL中,矩陣作爲狀態應用。因此,當您應用轉換時,它將繼續應用,直到應用另一個轉換或矩陣加載了該標識。 – greyfade 2010-07-08 00:37:20

+0

@ user146780:不完全確定你的意思,但如果你改變了轉換(或頂點),你將不得不重新轉換頂點,是的。如果你有一個頂點x =(a,b,1)^ T,你可以得到變換後的頂點x'= M * x,其中M是一個3x3矩陣。 M中的前兩個圓柱描述了旋轉和縮放以及翻譯的第三個圓柱。 x中的最後一個元素對於點是1,對於矢量是0。爲2D點導出2x2旋轉矩陣是一個非常有趣且簡單的練習! – Staffan 2010-07-08 01:17:19

0

通常這是通過變換矩陣完成的。這使得各個點可以相當快地轉換,並且是大多數基於2D(和3D)矢量的繪圖所使用的最常用的技術。

該應用程序特別建立在Anti-Grain Geometry之上 - 一個相當高性能的開源2D渲染引擎。它提供了許多可用於此類應用程序的「基元」。

+1

開羅(http://cairographics.org/)是另一個與Anti-Grain Geometry類似的庫。例如,它在Gtk +中使用。 – Staffan 2010-07-08 00:26:16

1

除了使用矩陣來模仿仿射變換(與翻譯的線性變換),則可能有興趣使用Quaternions- [R 執行這些操作。