文档章节

Blender的插件开发-快速入门

openthings
 openthings
发布于 2015/01/27 08:36
字数 977
阅读 3730
收藏 5

    使用Blender创建精彩非凡的作品,你可以是三维图形、创意设计的专家,但不必要成为软件开发的专家。

    Blender具有强大的插件扩展功能,不仅可以加载大量的各种功能、效率增强插件,而且稍微懂点python的也可以开发插件。先说说怎么用插件吧。

进入文件-用户偏好设置,在对话框中选择"Addon",然后可以设置自己需要的插件。
或者,ctrl+alt+u,快速进入设置对话框。

    Blender的插件机制全部采用Python实现,最新的2.73a版本集成了Python3.4.2的引擎。

    注意:Blender的脚本print("hello")函数是输出信息到启动的控制台的,直接运行的时候看不到输出的信息。

    但是,为了保持相对独立的运行环境,这个版本与操作系统的python是不同的,是在Blender的上下文环境运行的。因此,在操作系统安装的库,在这里是用不了的,有的库可以在Blender安装运行,但有的库是不行的。但这并没有太大的妨碍,因为Blender里面的库已经足够强大了。

    Blender运行、编辑Python的脚本有几种方式:

启动时运行:
    blender --python /home/me/my_script.py

命令行运行:
    拖动3D视图的右上角,向左下,扩展出一个窗口。
    选择左下角的立方体,选择Python控制台,然后就可以输入Python脚本了。

编辑器运行:
    跟命令行类似,先扩展出一个窗口。
    选择左下角的立方体,选择文本编辑器,然后选择新建,就可以输入Python脚本了。
    再选择运行脚本即可,也可以将输入的内容保存起来。

外部编辑器:
    使用任何的编辑器,如Sublime、记事本等编辑脚本,编辑脚本。
    然后复制到文本编辑器、或打开文件、或直接复制到命令行窗口即可。
    可以把Blender挂到一个调试器上,然后从python的IDE中就可以直接Debug进去,这个以后再说。

    下面我们再看一下Blender的脚本结构。

进入目录,看一下scripts目录下的东西,一切全明白了。
Blender不仅使用Python来扩展插件,连自己的很多参数设置也都是用的同样的机制实现的。
如果搞明白了这个参数,就可以容易地定制自己的工作台了。
比如,scripts/starup下存放了Blender的启动执行过程和参数。

    闲话少说了,马上开发一个自己的插件。

import bpy

class HelloWorldPanel(bpy.types.Panel):
    """Creates a Panel in the Object properties window"""
    bl_label = "Hello World Panel"
    bl_idname = "OBJECT_PT_hello"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "object"

    def draw(self, context):
        layout = self.layout
        obj = context.object
        row = layout.row()
        row.label(text="Hello world!", icon='WORLD_DATA')
        row = layout.row()
        row.label(text="Active object is: " + obj.name)
        row = layout.row()
        row.prop(obj, "name")
        row = layout.row()
        row.operator("mesh.primitive_cube_add")

def register():
    bpy.utils.register_class(HelloWorldPanel)

def unregister():
    bpy.utils.unregister_class(HelloWorldPanel)

if __name__ == "__main__":
    register()


    把上面的代码复制到Blender的文本编辑器中,点击“运行脚本”即可。

    怎么?没有反应?不会吧?

    鼠标右键选中缺省窗口的立方体对象(物体模式),到对象的属性面板,该面板的标题栏的第五个图标“立方体”选中,然后滚动显示到最下方,应该就可以看见了。

    终于体会到Blender的任性了吧?不要拍我啊!这是用的Blender的官方例子,以后我再弄个简单的。

    要想用Blender开发个插件,知道点这些皮毛是不够的。

    后续,我们首先要对Blender的对象体系进行探索。





© 著作权归作者所有

openthings
粉丝 308
博文 1115
码字总数 642784
作品 1
东城
架构师
私信 提问
加载中

评论(5)

k
kaa417

引用来自“kaa417”的评论

博主您好,想请教博主一个比较基础的问题,不太懂编译方面的原理。压缩包导入(包含一个文件下的几个.py文件)和单个.py文件导入有什么区别?因为单个py文件的导入在使用中文字符串的时候,在汉化的Blender下可以正常显示;而使用压缩包的情况下即使在 _init_.py添加 # -*- coding: UTF-8 -*- ,导入也会报错,能解决我的问题吗?

引用来自“openthings”的评论

可能是中文字符集的处理有问题,Blender的版本一直有一些这个问题,只能慢慢解决了。建议不要用压缩包,一个目录下是可以放多个文件的。
非常感谢博主能这么快回复我 T_T,非常感谢! 解决了,我用utf-8的编码格式解决了。
openthings
openthings

引用来自“kaa417”的评论

博主您好,想请教博主一个比较基础的问题,不太懂编译方面的原理。压缩包导入(包含一个文件下的几个.py文件)和单个.py文件导入有什么区别?因为单个py文件的导入在使用中文字符串的时候,在汉化的Blender下可以正常显示;而使用压缩包的情况下即使在 _init_.py添加 # -*- coding: UTF-8 -*- ,导入也会报错,能解决我的问题吗?
可能是中文字符集的处理有问题,Blender的版本一直有一些这个问题,只能慢慢解决了。建议不要用压缩包,一个目录下是可以放多个文件的。
k
kaa417
博主您好,想请教博主一个比较基础的问题,不太懂编译方面的原理。压缩包导入(包含一个文件下的几个.py文件)和单个.py文件导入有什么区别?因为单个py文件的导入在使用中文字符串的时候,在汉化的Blender下可以正常显示;而使用压缩包的情况下即使在 _init_.py添加 # -*- coding: UTF-8 -*- ,导入也会报错,能解决我的问题吗?
openthings
openthings

引用来自“921977939qqcom”的评论

实验成功,但是废话不要说太多!我刚入门,你说那么多废话就是累赘80
够任性,呵呵!
921977939qqcom
921977939qqcom
实验成功,但是废话不要说太多!我刚入门,你说那么多废话就是累赘80
首本 Blender 中文译著《Blender大师》即将发布

长久以来,作为开源三维软件的成功典范,Blender以其强大的功能、成功的开发、迅猛的发展态势,在CG创作及三维内容开发的流程中,是不可或缺的开源方案。 目前,Blender的中文教学资料相对匮...

zilangleon
2014/03/25
2.6K
2
使用Python和Blender来学习3D编程

Blender是一个强大的3D建模工具,他提供了非常强大的Python API,可以用来学习3D编程,还可以用来开发游戏。 要注意的是,Blender有两套Python API,一套是用来调用Blender自身的功能,一套是...

yexiaobo1990
2015/07/23
0
0
Blender的插件开发-对象体系探索

按照python的说法一切皆对象,Blender中亦然。 Blender的根对象是bpy,因此任何模块都需要: import bpy 注意: Blender的脚本print("hello")函数是输出信息到启动的控制台的,直接运行的时候...

openthings
2015/01/27
0
3
【图】Blender在科研上的演示应用

原载: Blenderget / 作者:@congcong009 (罗聪翼,“中国Blender第一人”),转载较原文有所改动。 Blender是一款开源3D动画制作软件。最初,Blender是荷兰的一个视频工作组NeoGeo与Not a...

openthings
2015/01/26
0
0
Sublime Text 3作为Blender的开发编辑器

Blender是一个开放的三维建模软件,支持python脚本扩展。而Sublime具有优秀的代码编辑功能,这二者的结合犹如干将莫邪,这里做一个简单的介绍。这里所做的是通过socket将Blender和Sublime连接...

openthings
2015/01/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

数据库

数据库架构 数据库架构可以分为存储文件系统和程序实例两大块,而程序实例根据不同的功能又可以分为如下小模块。 1550644570798 索引模块 常见的问题有: 为什么要使用索引 什么样的信息能成...

一只小青蛙
今天
5
0
PHP常用经典算法实现

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找(数组里查找某个元素) function bin_sch($array, $low, $high, $k){ if ( $low <= $high){ $mid = int......

半缘修道半缘君丶
昨天
5
0
GIL 已经被杀死了么?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/8KvQemz0SWq2hw-2aBPv2Q 花下猫语: Python 中最广为人诟病的一点,大概就是它的 GIL 了。...

豌豆花下猫
昨天
5
0
git commit message form

commit message一般包括3部分:Header、Body、Footer。 <type>(<scope>):<subject>blank line<body>blank line<footer> header是必需的,body、footer可以省略。 header中type、subject......

ninjaFrog
昨天
5
0
聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部