BlenderDev/Node
Wikipedia,自由的百科全书
小心的读了下blender node的这篇 http://mediawiki.blender.org/index.php/BlenderDev/AddingANode
教程
主要意思就是添加一个node不会有很多困难,最主要的就是两个文件,BKE_node.h里面要声明下新添加的node给它添一个识别号,以前一个id左移一位来写号码。
然后就是在node_shader/node_composite.c 文件里面添加node的实现,最简单的就是写出 bNodeSocketType/bnodetype/bnodefuncction三个部分。
每个接口 声明 如下
/* SocketType syntax:
socket type, max connections (0 is no limit), name, 4 values for default, 2 values for range */
最后用 {-1,0," "} 结束,socket type 有三类,数值/向量/rgba。
然后 将node的实现函数写出,
最后声明 一个 nodetype ,
写完后再在 node_all_shaders[] 这个阵列里面添加 &sh_node_XXX 的字符串。
这是一个基本过程,其他事情node系统会自己做出,比如ui之类的绘制,如果界面有特殊设置,就还要自己在draw_node.c里面添加代码。
还要更仔细深入blender的node的话,就参考这些文章,包括blender的界面api。
学习blendernode 需要读过的文章是 /doc/interface_API.txt 通用ui接口(只是blender能用的),在
源文件中寻找
然后是 http://www.blender.org/cms/Generic_Node_system_fo.742.0.html 基础性介绍文章,讲述
blender node系统的一般情况
当然为了要更深入理解blender的结构形式,还需要看
http://www.blender.org/cms/Blender_Architecture.336.0.html blender的架构 了解下blender的数据
结构,特别是 id 的使用方法
关于ui的东西 http://www.blender.org/cms/Blender_Nodes_UI.745.0.html node的ui有了scoket link
这些概念,有了它会对code有更形象的了解。
最后一篇:http://mediawiki.blender.org/index.php/BlenderDev/AddingANode 一个实例教程,讲解如
何添加一个math node 在shader node 面板里面的
更多,找一个最近版本的cvs blender 里面会有node editor的window选项,这样一边看代码,一边看
blender的这个node就会有更深入的印象。
还有更多,就是看blender的其他代码:DNA_listbase.h DNA_ID.h DNA_node.h draw_node.c node.c前三
个可以在makesdna文件夹里找到,后两个一般就在src里面。
static bNodeType sh_node_math= {
/* type code */ SH_NODE_MATH,
/* name */ "Math",
/* width+range */ 80, 40, 120,
/* class+opts */ NODE_CLASS_OPERATOR, NODE_OPTIONS,
/* input sock */ sh_node_math_in,
/* output sock */ sh_node_math_out,
/* storage */ "",
/* execfunc */ node_shader_exec_math
};
编译的时候会提示 NODE_CLASS_OPERATOR 未定义,所以改为其他值,
/* nodetype->nclass, for add-menu and themes */
- define NODE_CLASS_INPUT 0
- define NODE_CLASS_OUTPUT 1
- define NODE_CLASS_GENERATOR 2
- define NODE_CLASS_OP_COLOR 3
- define NODE_CLASS_OP_VECTOR 4
- define NODE_CLASS_OP_FILTER 5
- define NODE_CLASS_GROUP 6
- define NODE_CLASS_FILE 7
- define NODE_CLASS_CONVERTOR 8
这是shader node添加按钮里面的定义,在BKE_node.h里面可以找到。随便改一个,只要按照wiki教程的做发就可以得到结果。
http://mediawiki.blender.org/index.php/Hackers_Guide/Node_types
part of node
node 组件的介绍.

