我的畢業設計,做乙個動畫插值

2022-08-05 06:36:11 字數 1854 閱讀 7290

原文請檢視:

這原本是我 畢業設計 所做的事,但是看到如此的神奇,打算來介紹一下它,你會看到如此清晰,簡單的邏輯思維如何來解決實際問題的。我深深的被這些演算法折服。

維基百科解釋說,插值(interpolation)是一種利用已知離散的資料集產生新的資料集的方法,一般有能通過 曲線擬合 和 回歸分析等方法實現,最長見的莫過於 線性插值。

那3d幾何插值是怎麼回事呢?

以上的最左,最右一列分別是源網格,目標網格,那麼3d插值的目的就是自動生成其中間幀過程,以上圖的第2,3和4列分別是0.25,0.5和0.75的插值結果。正是基於此,3d插值目前在圖形學界非常的火,其在動畫領域有非常廣闊的前景。

多尺度幾何插值(multi-scale interpolation)

演算法的基本流程如下:

開始,我們將完整的網格作為層次樹的根節點(level 0),然後在此節點上的網格中隨即選取一些三角形,作為下一層節點的種子三角形。假設我們規定每一節點包含m個子節點。故可得知該節點的種子三角形個數等於該節點的子節點數 。我們定義組成每一節點的所有三角形構成乙個patch。通過這些種子三角形,依靠相鄰關係,逐步的形成了一塊一塊的區域,也可以叫做patch,直到這些patch相遇,並且相鄰的patch包含長度為1的三角形帶為止。實驗證明,隨機種子三角形的位置對插值結果並沒有太大的影響,比較好的位置,可以減少層次樹的高度,有利於減少計算量。經過驗證,不管輸入網格的點和麵個數或多還是或少,最理想的高度都在10至20之間。從根節點開始遞迴,我們已經在層次樹的level 1建立了m個patch了。

通過遞迴的應用此模式,我們就能建立整棵層次樹了,當然,我們可以定義層次樹的最低一層葉節點包含的三角形個數小於等於m 。在葉節點上,我們就可以對每乙個三角形和三角形對的二面角進行插值了。

構建好了層次樹,我們只需要在葉節點進行線性插值,此演算法只是對三角形的邊長和相鄰三角形對的二面角進行插值,如下圖:

線性插值公式如下

其他的以此類推。

下圖是乙個demo

該過程是本演算法的核心,有點難理解。我們知道在構建層次樹時,我們要求在同一層相鄰patch,也就是某節點下的子節點之間,共有乙個長度為1的三角形帶,如下圖是根節點下的子節點之間的三角形帶

由於我們知道插值的時候其實都是在各自的座標系裡進行插值,換句話說,我們並不關心葉節點插值後的頂點座標值,因為正是由於這些三角形帶,我們可以用配準的方法將這些在不同座標系下的patch合併到一起,構成乙個完整的網格mesh。

注意,我們為什麼一定要求是三角形帶呢,而不是共有乙個點呢,因為只有三角形才能構成乙個平面,而點即使重合,也能夠旋轉,所以這裡一定要求是三角形帶。

到底什麼是配準?

配置的目的是將不同檢視下的資料,也可以說成不同座標系下的資料,合併到同乙個檢視,或則座標系下,假設我們有m個檢視下的資料,那麼配準演算法將能得到m個旋轉和平移矩陣,使得這m的資料來源能夠很好的合併,這裡的代價函式一般是,不同檢視下的共有點對之間的距離平方和最小。

由上圖可以看見,來自二份不同視角的點雲資料合併成乙份點雲資料後,其細節能加的凸顯。

一般情況下,配準有二個步驟:

1. 找到不同檢視下的對應點;

2. 計算旋轉和平移矩陣;

正由於,我們相鄰patch之間也有共有三角形帶,也就是說包含共有的點對,所以我們可以通過配準的方式將某節點下子節點構成的patch合併成父節點乙個大的patch,以此回溯,就能得到插值的結果。

何謂融合(blending)?

因為不同patch之間的配準在計算旋轉,平移矩陣時,或多或少都會帶來誤差,所以在共有的三角形帶之間並不能很好的銜接,容易出現塌陷的效果,所以我們需要blending的過程使塌陷的現象消失,這個優化過程,我這裡不詳細解釋,具體看**。

引用:t.winkler** multi-scale geometry interpolation.

做乙個WordPress的Picasa外掛程式

一直想為我的部落格加上相簿功能 這樣我照的相片才有人看 但始終沒有實現。首先我不會在自己的部落格上開發乙個完整的相簿功能,一來費時費力,二來 我的空間容量有限 才100m呢 放不了多少 那麼我就需要選擇乙個第三方相簿服務,不但容量要大,而且最好能提供開發api,這樣我就比較容易把 相簿功能嵌入到我的...

測試驅動開發的第乙個例子 我的畢業設計

大學終於要邁入尾聲了,工作也找到了相對較好的,現在就差畢業設計了。我一直堅信著這樣的原則 當面臨很多選擇時,選擇最難的那乙個,所以我選擇了室內導盲系統設計。其實這也不是最難的,只是我以前沒有做過類似的工作,其他多多少少都有涉及,所以特地選擇了這個。說難其實也不難,因為硬體已經做好了,我要做的就是設計...

計算機畢業設計中用Python設計第乙個遊戲

什麼是bif?答 內建函式bif built in function 方便快速編寫,python中自帶了很多bif,我們可以通過命令dir builtins 來檢視,其中小寫字母開頭的都是我們想檢視的bif。通過help bif 命令可以看到關於bif的介紹及用法。用課堂上小甲魚教的方法數一數 py...