vizard介紹
Vizard是一款虛擬現實開發平臺軟體,從開發至今已走過十個年頭,它基于C/C++,運用新近OpenGL拓展模塊開發出的高性能圖形引擎,當運用Python語言執行開發時,Vizard同時自動將撰寫的程式轉換為位元組碼抽象層(LAXMI),進而運行渲染核心,
vizard入門
-
加載人物、物件、背景
avatar = viz.addAvatar('xxx.cfg', pos=(0,0,0), euler=(0,0,0)) viz.add('xxx.osgb',pos=(0,0,0), euler=(0,0,0)) viz.addChild('xxx.obj',pos=(-4,0,7.5)) -
鴿子隨機漫步
①利用𝑣𝑖𝑧𝑎𝑐𝑡. 𝑟𝑎𝑛𝑑𝑓𝑙𝑜𝑎𝑡()生成隨機位置,呼叫𝑣𝑖𝑧𝑎𝑐𝑡. 𝑤𝑎𝑙𝑘𝑇𝑜()實作鴿子漫步
②利用𝑣𝑖𝑧𝑎𝑐𝑡. 𝑐?𝑜𝑖𝑐𝑒()生成隨機選擇,隨機更新鴿子的𝑠𝑡𝑎𝑡𝑒狀態
③呼叫𝑣𝑖𝑧𝑎𝑐𝑡. 𝑤𝑎𝑖𝑡𝑡𝑖𝑚𝑒()實作隨機時間的等待
④利用𝑣𝑖𝑧𝑎𝑐𝑡. 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒()實作上述動作序列
pigeon = viz.addAvatar('pigeon.cfg',pos=(2,0,5)) random_walk = vizact.walkTo(pos=[vizact.randfloat(1.5,2.5),0,vizact.randfloat(4.5,5.5)]) random_animation = vizact.method.state(vizact.choice([1,3],vizact.RANDOM)) random_wait = vizact.waittime(vizact.randfloat(2.0,8.0)) pigeon_idle = vizact.sequence( random_walk, random_animation, random_wait, viz.FOREVER) pigeon.runAction(pigeon_idle) -
人物談話動作
def PersonTalk(): female = viz.addAvatar('vcc_female.cfg', pos=(1,0,8), euler=(-90,0,0)) male = viz.addAvatar('vcc_male2.cfg', pos=(0,0,8), euler=(90,0,0)) female.state(14) male.state(4) -
角色移動
①通過𝑣𝑖𝑧. 𝑔𝑒𝑡𝐹𝑟𝑎𝑚𝑒𝐸𝑙𝑎𝑝𝑠𝑒𝑑() ? 𝑠𝑝𝑒𝑒𝑑計算移動速度
②初始化歐拉矩陣𝑚1 = 𝑣𝑖𝑧. 𝑀𝑎𝑡𝑟𝑖𝑥. 𝑒𝑢𝑙𝑒𝑟(0,0,0)
③通過𝑣𝑖𝑧. 𝑘𝑒𝑦. 𝑖𝑠𝐷𝑜𝑤𝑛()分析對應滑鼠事件,根據人物朝向𝑎𝑣𝑎𝑡𝑎𝑟. 𝑔𝑒𝑡𝐸𝑢𝑙𝑒𝑟()更 新𝑚1平移變換矩陣
④通過𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑒𝑡𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛(𝑚1. 𝑔𝑒𝑡𝑃𝑜𝑠𝑖𝑡𝑖𝑜𝑛())更新人物位置
⑤通過𝑣𝑖𝑧. 𝑘𝑒𝑦. 𝑖𝑠𝐷𝑜𝑤𝑛()分析對應滑鼠事件,設定對應人物影片:
- 前進、后退影片:𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑡𝑎𝑡𝑒(2)
- 左跨步影片:𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑡𝑎𝑡𝑒(12)
- 右跨步影片:𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑡𝑎𝑡𝑒(13)
- 人物靜止影片:𝑎𝑣𝑎𝑡𝑎𝑟. 𝑠𝑡𝑎𝑡𝑒(1)
def roleMove(): m1 = viz.Matrix.euler(0,0,0) dm = viz.getFrameElapsed() * speed temp=avatar.getEuler()[0]*math.pi/180 if viz.key.isDown('w'): m1.preTrans([dm*math.sin(temp),0,dm*math.cos(temp)]) avatar.state(2) elif viz.key.isDown('s'): m1.preTrans([-dm*math.sin(temp),0,-dm*math.cos(temp)]) avatar.state(2) elif viz.key.isDown('a'): m1.preTrans([-dm*0.3*math.cos(temp),0,dm*0.3*math.sin(temp)]) avatar.state(12) elif viz.key.isDown('d'): m1.preTrans([dm*0.3*math.cos(temp),0,-dm*0.3*math.sin(temp)]) avatar.state(13) else: avatar.state(1) avatar.setPosition(m1.getPosition(), viz.REL_PARENT) -
獲取滑鼠位移
通過回呼函式
callback獲取def onMouseMove(e): global mp_x,mp_y mp_x=e.dx mp_y=e.dy viz.callback(viz.MOUSE_MOVE_EVENT,onMouseMove)
基于vizard實作的效果:
- 時鐘顯示當前系統時間
- 兩個談話小人(帶影片)
- 第三人稱漫游(帶影片)
- 前進(鍵盤 W 鍵)
- 后退(鍵盤 S 鍵)
- 左跨步(鍵盤 A 鍵)
- 右跨步(鍵盤 D 鍵)
- 旋轉(使用滑鼠左右平移)
- 上仰(使用滑鼠上下平移)
- 其他三維物體/背景
- 鴿子做自由漫步
- 花瓶擺件
- 天空背景
- 草地背景

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/386599.html
標籤:python
