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

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

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

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

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

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