URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 20 » [精华] Notes on SDNA(blender相关)
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
[精华] Notes on SDNA(blender相关)
[精华] Notes on SDNA(blender相关) - yuzukyo [2006-01-11 00:57 | 2,992 byte(s)]
 
 
 
 
 
Subject: [精华] Notes on SDNA(blender相关)
Author: yuzukyo    Posted: 2006-01-11 00:57    Length: 2,992 byte(s)
[Original] [Print] [Top]
最近在阅读Blender源码,不知道属不属于linux c/c++范畴.

看开发文档的时候也翻译了它的文章.
http://www.blender3d.org/cms/Notes_on_SDNA.436.0.html
任何一个想给blender内核加入一些新功能的时候,都会面对这一个很奇怪的系统--在代码中我叫它SNDA或者是struct-dna。这个核心的内容早就应该写出文档了,但现在还不晚。

这个系统是为了支持blender的文件格式和内部库/数据库的系统。有了它blender可以进行运行时检查结构数据的内容。这样可以增加很多好的特性:
-你可以增加或者移除结构的变量,甚至增加或者移除整个结构体而不需要考虑blender的版本兼容性。
-你可以把它使用在blender的Python或是smart Button中,运行时检查提供了哪一些的变量和结构体。

Blender中所有的可以存储到文件中的结构体都被描述为SDNA。这是一长串的包含结构体,变量名,变量类型的代码。“sdna”管理这些,它有一个内建的.h头文件的列表,读取他们然后转换成SDNA文件。

当一个文件被存储了,写结构体的函数察看结构体代码,然后把它写入一个块(struct BHead,writefile.c)。在这个文件的末尾,完整描述SDNA的文件添加到.blender文件中,使文件前后版本兼容。

每一份编译的blender都也有一份SDNA描述。当一个文件被读取,它的SDNA结构与可执行的blender的SDNA进行比较。不同的结构被标记,然后读取得时候转换。
允许的转换(变化)有:

-如果名字是一样的但是类型不同,它就要试图转换。只有可能的转换才会发生(比如short->int,int->float),不然就置0。
-新的变量会被初始化为0。
-确定数组的大小(比如[3][3],[4][4])。
-纠正指针大小(比如32bit,64bit)。
-char到float:被255分割。
-结构体中的结构体的改变正常工作。

早些时候,我没有在系统中包含自动的“padding”…,在结构体中包含一些空位,这是面对数据对齐是编译器的系统依赖习惯。比如说:在SGI中一个int一直是以一个可以被4整除的地址开始。当你设计这样一个结构体的时候:
struct XYZ {
char x_flag;
float x;
char y_flag;
float y;
char z_flag;
float z;
}
实际的结构体长度应该是6*4=24byte。更糟的是:向一个这样的结构体:
struct ABC {
char a;
}
在ALPHA机器上是8位,在32位机器上是4位。

所以为了有正确的SDNA结构和所有支持的操作系统,你应该设计一个非填空的结构体,下面是一些规则:
-设计SDNA结构最主要的目的是在64位机器上以8位对齐的在32位系统上自动的会变成4位对齐。
-有意义的指针是8位长,在32位机器也是一样。
-结构的大小应该一直是8位的倍数。
-在结构体内的结构体应该从一个可以被8整除的地址开始。
-指针从可以被8整除的地址考试,除非它指向的变量也是一个指针。
-int/float从可以被4整除的地址开始。
-shorts从可以被2整除的地址开始。

如果你不能够较好地管理它,那么在结构体中加入“pad”变量。你会在blender中看到更多这样的用法,它表示了在以后可以使用的空的空间。但是在blender中不要用"pad"变量干什么事!!!
[Original] [Print] [Top]
Subject: [精华] Re: 最近在阅读Blender源码,不知道属不属于linux c/c++范畴.
Author: teawater    Posted: 2006-01-11 09:17    Length: 382 byte(s)
[Original] [Print] [Top]
辛苦啦 标题改成原文的标题会比较明确一点
还有 你跟 http://www.linuxeden.com/forum/blog/index.php?op=ViewArticle&articleId=1971&blogId=67386 这个翻译是什么关系 不会是两个人翻译了同一个文章吧?
----
读了这么多年的书 还是觉得幼儿园好混
[Original] [Print] [Top]
Subject: [精华] Re: 最近在阅读Blender源码,不知道属不属于linux c/c++范畴.
Author: yuzukyo    Posted: 2006-07-10 11:01    Length: 1,080 byte(s)
[Original] [Print] [Top]
谢谢版主加了精华.
名字都是一样,所以是一个人:)
一直在进行blender的编程准备.
现在很迷茫,blender是一个自由软件,国内自由又偏向应用的就看到各个linux论坛比较好,但是大家的焦点都不在这个专业方向.
blender又是一个cg软件,但是很难看到国内有开源或者自由精神的cg软件交流场所,也许是我孤陋寡闻吧.
应该说最近关于 blender开发编程的文章翻译了很多.
所有文章都放在这里了: http://bbs.blendercn.org/viewforum.php?f=8
另外一个去处 wiki.blendercn.org
原文可以在blender的官方网站上查看:http://www.blender.org/cms/Development.81.0.html
在blendercn网站上,我的id是kidux,欢迎交流.
blender是一个以c/c++为主的软件,插件系统使用python.
虽然是一个专业软件,但是我觉得blender的开发者赋予它的更多含义是开源和自由.所以衷心希望有人能关注blender的发展,感觉很多开源软件发展的命题我还没有搞得太明白,混乱中...

这里是c/c++交流场地,但是觉得要深入体会编程,还是需要经历一些实在的项目:)

[Original] [Print] [Top]
Subject: [精华] Re: 最近在阅读Blender源码,不知道属不属于linux c/c++范畴.
Author: sydney    Posted: 2006-07-10 12:23    Length: 722 byte(s)
[Original] [Print] [Top]
http://www.povray.org/
http://graphics.stanford.edu/projects/
http://graphics.stanford.edu/~fedkiw/
http://forums.cgsociety.org/forumdisplay.php?s=135fb507eb70b81227912e901a892f42&f=109

CG么其实超多的, Blender只是其中一个应用.
----
Ich liebe Johann Sebastian Bach.
[Original] [Print] [Top]
Subject: [精华] Re: 最近在阅读Blender源码,不知道属不属于linux c/c++范畴.
Author: yuzukyo    Posted: 2006-07-17 13:21    Length: 951 byte(s)
[Original] [Print] [Top]
这就要看你怎么去认识,我更愿意把Blender 看着是cg跟开源的交集,你可以真切的看到实现.
你发的除了povray开源其他有谁有真正的代码实现放在公共域了呢?就算是开源了,能够用在商业应用上的又有多少呢?研究的目的又是什么?

这么多方面屈指可数的东西,却被说成仅仅是种应用.

Fedkiw的基于物理建模,又有多少不是给钱可以看到具体实现的呢?

要放几个连接然后就断定, "Blender只是其中一个应用" 这个不用费多少力气.

Blender已经把触手伸向了cg的各个方面,它是一个超集.

扯远了,要通过linux得到什么,通过blender得到什么,每个人都有自己的认识.

与话题无关,还是回到编程上面吧.

Blender 的变成就是在做一个可视化的数据库,有自己的虚拟文件系统,有自己独特的一套版本兼容机制,在设计上也完全符合xp方法.界面设计上也可圈可点,关键是如何从这些代码中去获得自己的编程经验.向附加值高的编程应用迈进,先投入学习,再思变,恐怕要比自己闷头随便来点代码的学习要好得多.
[Original] [Print] [Top]
« Previous thread
关于fork的一个程序的讨论~!
C/C++编程版
20
Next thread »
请教:如何将一个文件移动(move)到其它目录?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:22, cost 0.074501037597656 ms.