Blender是一個(gè)強(qiáng)大的3D建模工具,他提供了非常強(qiáng)大的Python API,可以用來(lái)學(xué)習(xí)3D編程,還可以用來(lái)開(kāi)發(fā)游戲。 要注意的是,Blender有兩套Python API,一套是用來(lái)調(diào)用Blender自身的功能,一套是用來(lái)調(diào)用BGE的功能(做游戲開(kāi)發(fā))。我在這里僅僅介紹調(diào)用Blender自身功能的API。
我在麥子學(xué)院學(xué)習(xí)的時(shí)候老師曾說(shuō)過(guò),通過(guò)例子來(lái)入門是初學(xué)者最好的學(xué)習(xí)方法。我先舉個(gè)例子:使用Blender的Python API來(lái)做3D模型的自動(dòng)化渲染。
下面這段腳本非常簡(jiǎn)單直觀,
1. 首先,得到要渲染場(chǎng)景的context,并將渲染輸出文件格式設(shè)置為PNG。
2. 加載一個(gè)圖片。
3. 通過(guò)名稱(ID)“tex001”找到一個(gè)texture,,將該texture使用的圖片設(shè)置為剛才加載的圖片。
4. 遍歷3D模型中所有的camera,使用每個(gè)camera來(lái)做渲染。
Python代碼 [url=][/url]
1. from Blender import Object, Scene, Texture, Image
2.
3. scene = Scene.GetCurrent()
4. context = scene.getRenderingContext()
5. context.setImageType(Scene.Render.PNG)
6.
7. render_dir = "D:/WORK/blender/render"
8.
9. img = Image.Load('D:/WORK/blender/pictures/111.jpg')
10.
11.texture = Texture.Get('tex001')
12.texture.type = Texture.Types.IMAGE
13.texture.image = img
14.
15.cameras = [obj for obj in scene.objects if obj.getType()=='Camera']
16.for index, camera in enumerate(cameras):
17. print '\tRendering %i of %i cameras.' % (index+1, len(cameras))
18. context.setRenderPath('%s/%s_' % (render_dir, camera.name))
19. scene.setCurrentCamera(camera)
20. context.render()
21.
22.print 'Done per camera render'
將這段腳本保存為render.py,然后執(zhí)行這段腳本:
blender -b xxx.blend -P render.py
(xxx.blend為Blender的3D模型)
執(zhí)行之后,渲染結(jié)果將保存在設(shè)置的目錄中。
Blender的Python API非常強(qiáng)大,除了這個(gè)例子展示的這些基本功能外,還完整封裝了OpenGL的功能(Blender是完全基于OpenGL開(kāi)發(fā)的)。使用Blender的Python API來(lái)學(xué)習(xí)3D編程,是一條很好的途徑。