Posted on 2019-08-06 11:07
eryar 閱讀(1904)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
2.OpenCASCADE
OpenCASCADE動(dòng)畫(huà)功能
eryar@163.com
1.Introduction
OpenCASCADE提供了類(lèi)AIS_Animation等來(lái)實(shí)現(xiàn)簡(jiǎn)單的動(dòng)畫(huà)功能。

從其類(lèi)圖可以看出,動(dòng)畫(huà)功能有兩種:一種是相機(jī)的動(dòng)畫(huà)AnimationCamera,一種是模型的動(dòng)畫(huà)AnimationObject。因?yàn)?/span>OpenCASCADE不像OpenSceneGraph那樣是專(zhuān)門(mén)做仿真動(dòng)畫(huà)的,內(nèi)置多線程,OpenCASCADE中的動(dòng)畫(huà)可以理解為一個(gè)while(true) {update();},即在動(dòng)畫(huà)時(shí)間內(nèi)對(duì)相機(jī)或模型的起始位置和終止位置進(jìn)行插值并更新來(lái)實(shí)現(xiàn)動(dòng)畫(huà)。對(duì)于簡(jiǎn)單的動(dòng)畫(huà)效果,這種方式是夠用了。
2. Examples
在OpenCASCADE的源碼文件夾中提供了動(dòng)畫(huà)用法的示例,分別演示了模型變換、視圖變換及將動(dòng)畫(huà)保存成視頻文件,當(dāng)然這個(gè)功能需要引入第三方庫(kù)FFmpeg:

OpenCASCADE中動(dòng)畫(huà)中間位置的生成采用了類(lèi)gp_TrsfNLerp進(jìn)行插值。

根據(jù)其注釋是對(duì)一個(gè)變換的三個(gè)部分分別進(jìn)行線性插值,旋轉(zhuǎn)部分采用四元數(shù)類(lèi)進(jìn)行插值。這種插值方式不可能滿足復(fù)雜動(dòng)畫(huà)的要求,不過(guò)可以把這個(gè)類(lèi)當(dāng)成一個(gè)插值的例子。
在Draw Test Harness中輸入以下命令:
source tests/v3d/anim/propeller
vanim anim -play -playSpeed 0.1
即可以讓一個(gè)螺旋槳?jiǎng)悠饋?lái)了:

其實(shí)這個(gè)螺旋槳?jiǎng)赢?huà)是個(gè)復(fù)雜的例子,包含了視圖動(dòng)畫(huà)和模型動(dòng)畫(huà)。對(duì)于簡(jiǎn)單的示例,可以參考另外幾個(gè)文件,里面的例子是相對(duì)簡(jiǎn)單的。

3. Conclusion
OpenCASCADE7.3版本中引入了簡(jiǎn)單動(dòng)畫(huà)的功能,結(jié)合其測(cè)試案例,找到其實(shí)現(xiàn)源碼,可以方便地在程序中實(shí)現(xiàn)簡(jiǎn)單的動(dòng)畫(huà)功能。其中動(dòng)畫(huà)支持兩種方式:一種是視圖支畫(huà),一種是模型動(dòng)畫(huà)。視圖動(dòng)畫(huà)一般用于兩個(gè)視圖之間的動(dòng)畫(huà)過(guò)渡,如從主視圖切換到仰視圖中間加一個(gè)動(dòng)畫(huà)過(guò)渡;模型動(dòng)畫(huà)可用于簡(jiǎn)單的動(dòng)畫(huà)仿真。