用Python寫3D游戲,太贊了
vizard介紹
Vizard是一款虛擬現實開發平臺軟件,從開發至今已走過十個年頭。它基于C/C++,運用新近OpenGL拓展模塊開發出的高性能圖形引擎。當運用Python語言執行開發時,Vizard同時自動將編寫的程式轉換為字節碼抽象層(LAXMI),進而運行渲染核心。
vizard入門
1、加載人物、對象、背景
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))
2、鴿子隨機漫步
①利用????????????. ??????????????????()生成隨機位置,調用????????????. ????????????()實現鴿子漫步
②利用????????????. ???????????()生成隨機選擇,隨機更新鴿子的??????????狀態
③調用????????????. ????????????????()實現隨機時間的等待
④利用????????????. ????????????????()實現上述動作序列
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)
3、人物談話動作
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)
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)
5、獲取鼠標位移
通過回調函數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實現的效果:
1.時鐘顯示當前系統時間
2.兩個談話小人(帶動畫)
3.第三人稱漫游(帶動畫)
- 前進(鍵盤 W 鍵)
- 后退(鍵盤 S 鍵)
- 左跨步(鍵盤 A 鍵)
- 右跨步(鍵盤 D 鍵)
- 旋轉(使用鼠標左右平移)
- 上仰(使用鼠標上下平移)
4.其他三維物體/背景
- 鴿子做自由漫步
- 花瓶擺件
- 天空背景
- 草地背景