【電腦動畫】蒙皮筆記

來源:互聯網
上載者:User

標籤:

最近剛開始接觸電腦動畫,一片空白,嘗試做了一下3D蒙皮,發現數學真是差得難以想象,矩陣的什麼的全部忘記了,真是接下來該惡補一下基礎了……

在這裡把遇到的幾個問題記錄一下。

主要參考書目:《電腦動畫演算法與技術》《3D遊戲》(英國人寫的書已經絕版了)《3D遊戲引擎設計——即時電腦圖形學應用方法》

關節就是一個變換矩陣,在層次儲存中,一般會從根節點開始一層層的儲存關節矩陣:

所以每個關節儲存的矩陣都是建立根關節之上的。

以3個關節為例,轉換如下:

—(T0世界矩陣)—>Link0—(T1相對Link0的Link1轉換,相對旋轉R0)—>Link1—(T1.1相對Link1的Link1.1轉換,相對旋轉R1)—>Link1.1

另外每個關節的變換無非就是旋轉加平移。

故,設有一在Link1.1的座標中有頂點V,那麼將其轉換到全局座標V‘就是:

V‘ = T0*T1*R1*T1.1*R1*V(這裡使用列向量)

這個其實就是將局部座標中的頂點通過這一系列的矩陣變換到全局座標中。

在蒙皮頂點混合的時候由於我寫的程式還是相當蛋疼的,我為了方便匯入把一個模型拆成了3個模型,然後把三個模型一一變換到世界空間,這樣免去從模型空間到骨骼空間的計算,但是在混合的時候需要根據骨骼來裝換頂點到對應的骨骼空間,這些東西都在shader中計算完成。

#version 410 corelayout (location = 2) in vec4 a_position;layout (location = 3) in vec4 a_weight;uniform mat4 mv_matrix;uniform mat4 proj_matrix;uniform mat4 b1_matrix;uniform mat4 b2_matrix;uniform mat4 b3_matrix;uniform int bone;//骨骼長度float bone_len = 47.2441f;void main(){    vec4 new_a_position = a_position;    vec4 new_a_position1 = a_position;    //向上位移的頂點    new_a_position.y += bone_len;    //向下位移的頂點    new_a_position1.y -= bone_len;        //對不同的骨骼做不同的變換    switch(bone)    {        case 1:            gl_Position = proj_matrix*mv_matrix*(a_weight.x*b1_matrix*a_position+a_weight.y*b2_matrix*new_a_position1);            break;        case 2:            gl_Position = proj_matrix*mv_matrix*(a_weight.x*b1_matrix*new_a_position+a_weight.y*b2_matrix*a_position+a_weight.z*b3_matrix*new_a_position1);            break;        case 3:            gl_Position = proj_matrix*mv_matrix*(a_weight.y*b2_matrix*new_a_position+a_weight.z*b3_matrix*a_position);            break;        default:                    break;    }    }

然後是:

混合頂點後

【電腦動畫】蒙皮筆記

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.