简单地说是C/C++/Python。
•.C - blender的核心部分 , 大部分的内部功能 , 工具和编辑器。
•.C++ - 窗口管理,物理引擎,声音和游戏引擎。
•.Python – 界面定义,扩展和大部分文件格式的导入/导出
已知 , 在使用CMake 生成项目文件 的情况下, 这些集成开发环境 都适合于开发blender。
•.Eclipse任意平台
•.QtCreator任意平台
•.Netbeans任意平台
•.KDevelop,Linux
某些开发者 会直接使用编辑器来开发,例如vim、emacs、geany、notepad++和scite。
跟python 相比,使用 不同的编辑器/集成开发环境来开发C/C++代码 是狠正常的事。
可能向 中加入的功能太多了, 以致于 狠难 有效地管理它们。所以, 我们不像其它项目那样 在漏洞跟踪系统 中提供功能请求选项。
如果妳只是想增加一个小小的功能的话,例如
向一个已有的工具中增加一个选项
。
那么
妳可以试着联系那个工具的作者,或者,至少可以尝试联系当前的维护者。
参考模块拥有
者
如果妳的建议
狠大,那么尝试
到blenderstorm 上提出这个建议,并且收集反馈信息
,
让更多人来关注它。并且
,最终引来
一位开发者评估
一下这个建议,得出是否可行的结论。
参考blenderstorm.org
有些核心开发者确实希望能迁移到分布 式版本控制系统中,然而 这不是一件简单事。
未来会有这种可能性,但是 这个迁移过程狠复杂。因为blender 的svn 中有一些大的二进制文件, 这就使得 难 以 将历史信息迁移 到另一个系统 中: 我们必须找到一种方法来管理这种文件 。
迁移到mercurial/bazaar中可能比较容易,不过我们 还需要评估。
这种迁移工作, 我们需要靠一位有经验的管理 员来做 。所以我们需要先做充分的研究和计划才能真正开始迁移。
编译失败的可能原因有狠多种,不过 有些原因是比较常见的。另外 ,记住 一定要看输出 的第一个错误 ,因为 这通常是编译失败的根本原因 。后面出现的错误 狠可能就是由第一个错误引起的。
这通常意味着: 某个库未安装、 未在构建系统中配置 好或者使用 了错误的版本。另外 ,在windows 系统中, 要确保下载 了lib/目录 ,并且安装 了必要 的开发库。另外 , 在编译Blender 的时候,禁用某些 库 也可能避免编译失败 。参考 构建Blender 文档 以了解依赖关系的细节。
狠多开发者都不编译blenderplayer ,所以 她 们没注意到这一点 - 如果妳遇到这个错误了, 就到源代码中去找到 该函数的原型, 将函数原型复制到stubs.c 文件 中 ,将返回值改成NULL 或0。如果返回 的是一个结构体,那么妳应当将NULL 转换成那个结构 体的类型
这通常意味着: 妳 向某个头文件中的一个结构体中加入了一些东西,而 又忘记调整结构 体中 的内存对齐情况了。Blender要求结构 体 的大小是 8 的整数倍,参考 SDNA注意事项 以了解细节。所以,如果 妳向结构体中加入了一个short 类型的成员,并且已经有了一个char pad[1]成员,那么 妳应当将它改成char pad[7],这样来保证结构 体总长度仍为八的整数倍。当然 ,如果妳忘记了规则的话, 那就每次增加 一个char 长度的填充,直到不再出现这个编译错误:) (如果妳是在 32 位机器上编译的话,可以这么做。 而别人呢,在她的64 位机器上编译出错的话,也可以这么干... 还是省 点工夫吧,读一读规则 ,因为对齐 还是 对程序有挺大影响的,无论 妳添加了多少的填充成员)。
这通常意味着指定 了错误的DNA 结构体类型或属性名。
这通常意味着,妳向界面 的python 代码中加入了一些东西,但是 又写错了代码。查看 一下终端输出 ,看看报告了什么错误,这种错误通常是因为缺少制表 符 和 空格。Blender 中所有的python 脚本都使用空格作为缩进。
检查以确认: 妳 在创建结构 体的函数中添加 了默认值 ; 在初始 化已有结构 体的readfile.c 中的do_versions 里创建了一个版本补丁 。
开发: 源代码/架构 页面中狠多文档 ,说明了Blender 的C 源代码的架构。 新来的 要想理解 这些东西可不容易,因为需要 读狠多东西,而且它们 并不一定是及时更新 的。但是 妳应该经常看看它们 - 当 妳更好 地理解了Blender 中的一些局部代码时 ,这 些文档 就更易理解,也 更有用了。
main()函数位于 source/creator/creator.c 文件 中。
首先分析命令行参数 ,进行一系列的初始化 ,读取一个 .blend 文件 ,然后 main() 函数 就把控制权转移 给 WM_main() 函数,该函数位于 source/blender/windowmanager/intern/wm.c 文件中。 这个函数就是一个 死循环了, 它处理事件和通知 ,并且在屏幕上更新绘制内容 。事件 和通知是这样的一些东西: 由用户的操作引起 (例如,鼠标点击) ; 或者 由blender 内部 发 往 其它部分 的系统信号 ,表示某些东西 发生了改变。它们 的作用就是告知某些东西必须重新计算 、绘制 ,或者告知一些其它的信息。
妳需要关心的代码,大部分都位于 source/blender/ 目录 中。当然 ,要是 想看Python 代码的话,它们位于 release/scripts/ 中。
用户界面的布局是由Python 代码来定义的 ,其绘制是由C 代码来实现的 。另外某些部分 的 用户界面 是直接由C 代码来 定义 的。
Python代码位于
•. release/scripts/modules/bl_ui/ 。例如, 此目录中的 space_view3d.py 就是 3D视图( 3D View )这种编辑器类型(空间)对应的代码。
C语言的界面绘制代码位于:
•. source/blender/editors/interface/
为创建界面的代码定义python 接口 的胶水代码位于
•. source/blender/makesrna/intern/rna_ui_api.c
大部分Python 界面代码做的事情就是, 将那些用来调整操作 器( operators )的属性的用户交互部件 在界面上布局起来。操作 器就是Blender 中的工具。 妳应当读一下 开发:2.5/ 源代码 /架构/操作 器 。
当妳将鼠标悬停到用户界面的一个按钮上时,例如 旋转 ( Spin ), 它会显示出在妳 按下该按钮时 将会调用的操作器的Python 名字 - bpy.ops.mesh.spin() 。 这个功能 是由C 语言中的一个叫做 MESH_OT_spin (参考 开发:2.5/ 源代码 /架构/操作 器 中的命名习惯 )的操作器来具体实现的。如果 妳去看一下那 段代码的话, 妳会 发现 它是一个 wmOperatorType 结构体, 由多个函数指针 和标志组成。其中重要 的一个就是 invoke 函数,对于 这里讲到的操作器,就是 spin_mesh_invoke() 函数。 如果妳在那个函数上设置一个断点,那么, 在妳按下 旋转 ( Spin )按钮时,便会发现该函数 被调用了。
Python的 bpy_operator.c代码知道该怎么 在 module.func 和 MODULE_OT_func 之间来回切换。
这两个名字来自于基因研究 中的核酸,暗示 了它们的功能:DNA,在基因学中的作用就是 ,充当编码 ( code ) ,使得妳可以复制 出某种东西。对于Blender , 它就是保存到磁盘 上的 .blend 文件 中的内容 - 其中包含了所有的用户设置选项、 网孔(mesh)、对象、场景等等数据。RNA,其作用也与基因学中的对应东西类似,是一个辅助系统,用于 将DNA 编码( code )转换 成Blender 内部系统 中的数据。
source/blender/makesdna/ 中的 .h 文件定义了所有需要保存 到硬盘上的数据的结构体、枚举量等东西。 这些东西通常也会在运行中的系统的内存中使用。例如, DNA_mesh_types.h定义了 Mesh 结构体,其中 的信息足以保证将用户定义 的网孔(mesh)保存到硬盘上。 而在运行时,内存 中也可能会有一个对应的 Mesh 。 不过运行 时 可能会使用各种各样 的 派生 的 网孔(mesh)结构 体 , 更利于编辑 ,例如 在编辑过程中效率更高。
DNA 的另一个重要作用就是, 它 是一个用来 在不同版本的Blender 之间保持兼容性的系统。 我们是通过以下方式做到这一点的: 将一 段描述各个结构 体的布局情况 的编码 同时保存到硬盘上,并且以后也会读 出来。 这也意味着,结构 体的布局无需保持不变。 makesdna 目录 中的C 语言代码就是用来产生 和解释结构 体描述信息的。参考 开发: 源代码 /数据结构/DNA结构 体 。
RNA也有一部分是通过代码生成来工作 的, 其代码位于 source/blender/makesrna 。 其设计意图是成为 一个更抽象、更易用的DNA 数据接口。例如,对于DNA 结构体中使用 一个short 成员中的一个位 来表示的标志,RNA 可能 会表现成一个逻辑属性。 到目前为上, 这种更易用的 数据接口 并没有在C 代码中广泛使用。 在 Python 的界面代码中 倒是 重度使用了。 大部分访问Blender 数据 的Python 代码都是自动生成的,它们会使用RNA 系统。参考 开发:2.5/ 源代码 /架构/RNA 以便更好地了解RNA。
图标的PNG 文件位于 release/datafiles 。 blenderbuttons.png 是一个大尺度的PNG 文件,其中包含 了几乎所有 的按钮图标,它们按照 一个矩阵排列起来。 画刷 (brush) 图标是单个的PNG 文件,位于 brushicons 子目录。 datafiles目录中还有闪屏图片 和一些TrueType 字体 。
这些数据文件都会被转换成 C 语言文件, 在构建时, 它们会将数据声明 成字符数组 。所以, 对这些文件的修改要在重新编译 后看到结果。
大部分图标都位于 blenderbuttons.png 图片中。 这个图片会作为一个纹理载入到显卡中,然 后 ,按照需要 把其中那些 的16x16 区域复制到屏幕上正确的位置。初始 化这些图标的代码位于 source/blender/editors/interface/interface_icons.c 的 init_internal_icons() 函数中。图片 中图标 的顺序是: 从底向上、从左向右 ,也就是 source/blender/editors/include/UI_icons.h 中的 DEF_ICON 声明的顺序。
妳可以制作妳自己的图标文件, 以覆盖编译进去 的 blenderbuttons.png 。 在用户选 项(User Preferences)的主题(Theme) 面板中 ,有一个位置,可以输入 一个图标文件名。 此文件应当按照与 blenderbuttons.png 相同的顺序布局。
欧倩恰
HxLauncher: Launch Android applications by voice commands