Posted by: billconan | October 11, 2006

blogger backup 备份blogger全站的工具

it seems that the censorship on wikipedia.org, which used to be strict, is kinda relax recently. i can log on to that site now without any extra effort, no proxy, no tor. and today there are lots of people talk about this, they are afraid this is only temporary. so i thought of blogspot.com, how, if they banned blogspot.com again? i need a tool to download all the entries of my blog and save to a file as a backup. you know, sometimes, it is hard to be chinese.
i actually did this by modifying the sample code enclosed in the google api pack. for some reason, probably the poor network, the app doesn’t work sometimes, so, just try more times.

How-to-use:
1.specify the login name and password.
2.click “GO” button and wait.
3.all the blogs under this name will be available in the choose control, just choose the one you want.
4.wait for a while, and all the entries show up in the tree view. click “save” button to export to a html file.

最近好像wikipedia.org要解禁了,我已经可以不用代理访问到英文的维基百科。网上最近关于这个事情的讨论挺多的,有人担心是临时现象,空欢喜一场。我于是想到万一哪天blogspot.com再次冷不丁被封该怎么办。于是我觉得应该有个能备份整个站点的程序。我这个程序实际上就是从google api里面附带的例子改的,但是有些时候运行不成功,要多试几次。现在只能抓html的代码,看看哪天有时间做一个能把图片也都抓下来的。

这个的用法是这样的:
1.填写好你的用户名和密码。
2.点击GO按钮等一下。
3.然后所有在这个用户名下的博客都出现在下拉选择中,选择要备份的那个。
4.再等,然后所有的网志就出现在树形列表中了,按存储按钮,可以生成一个html的文件。

this is how a buckup file looks in firefox:
备份的文件在firefox里面的效果:

click here to download
点击此处下载

one more thing is, blogger backup is writen with c#, so .net framework 2.0 is necessary to run the app.
c#写的,要.net 2.0才能运行

Advertisements
Posted by: billconan | October 11, 2006

学究一下,编了一个radiosity辐射度渲染程序


我特别羡慕那些有强烈兴趣爱好,懂得自我发掘,而且做出一定成果的人。我不是这样的人,我的兴趣太多,又不太有常性。以前我在旧的博客上天南地北地扯了不少,却很少专注于自己的事业,所以当初决定把博客搬到这里的时候,我给自己规定的基调是尽量走学术路线。其直接的后果是,流量下降,评论大幅度减少,女Fans更是一个不剩,现在基本上已经属于是自娱自乐了。学究当到底,今天我编了一个radiosity的偷懒算法程序。
很早以前,我在azure的博客上看到他做了一个辐射度的渲染程序。当时我没有仔细看,但是有一点印象特别深,就是他把摄影机摆在patch上来模拟能量的入射。我不知道这个想法是不是他原创,但是真的是太聪明的一个偷懒办法了。传统的辐射度需要做很多射线,然后再和多边形求交,现在可以用现成的摄影机来替代,简直太省事了。
这样一来,辐射度程序实际上变成了这样的一个过程:
首先组织好一个场景,这一步我是在3D Max里随便做了一个房间,房间上开了一个窗户,用来透进点亮光,作为初始的光源。房间的中间放了一个柱子,主要我想看看这个柱子能形成什么样的影子。在3D Max中导出成obj格式的文件,然后把里面的数据直接粘帖到代码里,改了改,存放在数组中。
然后为每个面开辟光照贴图的空间,并且计算法线,切线。
将贴图分解成小patch,计算每个小patch中心点在3D场景中的位置,在这个位置上放置摄影机,拍摄当前的场景。将patch中心映射到3D场景中的公式是这样的(四边形v1、v2、v3、v4):
v1+(v2-v1)*u+(v4-v1)v 其中uv是贴图坐标,v1、v2、v3、v4是四边形的端点。
渲染的场景存放到一个空间中,我的程序里是一个64见方的数组。然后对这个数据进行分析,得到一个当前patch的颜色。分析的过程是,首先计算这个64见方的图像上每个象素距离中心点的距离,根据这个距离得到一个权重。为什么需要权重呢?因为在传统的辐射度算法中用的是射线来模拟光照,光照对于颜色的影响取决于入射的角度。因为我这里没有用射线,所以无法得到角度,但是摄影机得到的图像中,点的位置离中心越远,说明生成它的入射光线的入射角就越大,所以在最后决定颜色的时候越不重要,这样将所有点的权重计算出来作一个加权平均,得到一个颜色值。但是这还没完,还需要乘以一个数值,这个数值是一个近似的能量衰减。光在传播的过程中能量是衰减的。实际上这个衰减和光的传播距离应该是相关的。在传统的辐射度计算中,射线和多边形相交的同时可以得到这个距离,这样就比较容易计算精确的衰减。但是因为这个是偷懒版的程序,不能得到光源距离当前面长度。所以就简化假设任意距离的光源产生的光照都要衰减一个固定的比例。我的程序里用的0.2。当然也可以这样来假设,光源距离当前物体非常远,而当前物体中(我的这个房子)的所有面之间的距离相对于这个光源与这个房子之间的距离可以忽略不计,这样的话房子中各物体的衰减差别不大,就近似成一样的。
以上就是我的懒汉版光照模型。
一开始我在这个程序中用的贴图是128*128的,感觉稍微有些粗糙,后来改用256*256的,速度明显变慢了。不过最后出来的结果我总觉得别扭,但是又看不出来问题。不知道是不是我的懒汉光照模型有问题,还是我的程序什么地方疵了。有时间再看看。左边这个图显示的是如何从最开始的初始场景逐步照亮的过程,就第一次辐射变化比较明显,后面的变化及其细微。

Posted by: billconan | October 10, 2006

维基百科周年祭

转眼已经到了10月份,昨天突然一下就冷了。算起来维基百科挂了也有一年了吧,有多少人还记得他呢,我觉得有识之士都应该来写一写。每本被烧的书都照亮了世界。这是爱默生的名句,说的多好啊。当然我也承认,这句话套用到网络上,说每一个被封掉的网络都曾经照亮了世界,确实有些过了,因为的确有比较龌龊的站点。但是维基百科,确实是照亮了世界。
好像封杀网络的原则是这样的,已知有一个新站,则首先把它放在被封杀之列,然后如果比较老实再酌情解禁。比如说wordpress.com吧,因为是一个任何人都可以发表的网站,所以保不准哪天出点什么言论,所以不管三七二十一先给它封了。这分明是典型的人性恶论。共产主义者不是首先应该是人性善论者么?马克思,你说是吧。
明哲保身吧,我才不要当什么夏明翰。引用一些名人名言,可都不是我说的啊:

每本被烧的书都照亮了世界。—— 拉尔夫·沃尔多·爱默生

“未来是那么的不可知”。Technorati的死掉、Google的“连接被重置”,都让我看到了作为一个中国IT工作者的信心。—— 老白
也许哪一天,我们用的都是国货。

我们与中国政府全面合作是因为开始相信“中国改变互联网”,而非“互联网改变中国”。—— 辩护律师
Google、Yahoo、微软及思科在美国国会为有关帮助中国政府进行网络审查的辩护辞。
(这里我补充一句,从长远的角度来看,应该是科技左右政治,比如说工业革命催生资本主义,但是貌似现在这里是政治在左右科技,看看什么是违背历史规律吧)

每一个人,只要是正常人,都有着各种各样千奇百怪的思想。甚至可以说,思想天然就是“异端”。—— 魏武挥,《书籍的版权》

不多久,蜘蛛也要备案才准上网了。——网友
重庆要求个人在家上网也要备案。

现实中用真名说假话,网络中用假名说真话。—— 西山晴雪

……不光是挡住了你们不舒服的信息,也挡住了中国人同世界对话的路。唉,能将就看点就将就看点吧。其实在这个问题上,是不屈服全部不能看好呢?还是屈服一点然后也能将就看一点好呢?我是倾向于后者的。—— Wales

Tor这个工具不是用于绕过什么的,而只是用于防止私人信息泄露的。任何人都可以安装Tor的服务器,安装后就可以方便地得到全部在线服务器的IP,并且,你用Tor连接时很可能会经过这个假的服务器,然后就无所遁形了。所以也不要对它太有信心。—— Boingboing在说明德国人Tor事件的贴子中指出

只要我还能有所选择,我就只想生活在这样的国家里,这个国家中所实行的是:公民自由、宽容,以及在法律面前公民一律平等。公民自由意味着人们有用言语和文字表示其政治信念的自由;宽容意味着尊重别人的无论哪种可能有的信念。—— 阿尔伯特·爱因斯坦

一部分儿童有思考的习惯,而教育的目的在于铲除他们的这种习惯。—— 伯特兰·罗素
从每天上学的时间看,中国儿童最有思想。(目前互联网也在做同样的事)

有些同志有信心封掉一切可能的风险,是因为有些同志对中国的网民没信心。我们总是以最没有信心的方式,来表现我们的信心。或许有一天,当中国网民对所有国外的服务都不再有信心,一定会有人因此自信心爆棚。这几乎是一定的。—— keso
把有限的技术,集中到封锁网站上。

网民人数多;言论渠道不畅。—— 网友
论坛在中国特别火的原因。

谈恋爱是以自欺始,欺人终;搞政治是以欺人始,以自欺终。—— 李敖

“和”的右边是口,就是说人人都有饭吃;“谐”的左边是“言”,就是人人都可以说话。—— 张贤亮
全国政协委员、作家张贤亮所理解的“和谐社会”的基本精神。

不 矢口 亻十 幺 日寸 候,亻奄 口斤 言兑 言仑 土云 有 辶寸 氵虑 白勺 言兑 氵去,于 是,亻奄 学 会 了 扌斥 字。后 来 , 亻奄 米青 礻申 分 裂 了。—— 网友
请以恰当的格式阅读……

我不同意你的观点,但我誓死捍卫你说话的权利。—— 伏尔泰

在人类文明史上,哪个国家是靠政府管制做起来的?几乎没有。政府管制和不受制约的行政权力,是贫富差距恶化的根本原因。—— 陈志武,《陈志武专访:正视我们的不幸福》

Posted by: billconan | October 9, 2006

Pillow简介


一直缺少一篇关于Pillow的介绍,现在补上。Pillow是一个我编的轻量级多边形3D建模程序,目前的目标是在模仿silo(www.nevercenter.com)的功能。这个程序还处于初级阶段,实现了一些基本的多边形建模操作,比如对点、边、面、体的挪动旋转以及缩放操作、删除、焊接、切割等等,另外还有catmull-clark细分,出于速度的考虑,目前人为地限定在最大5次细分,实际上细分的次数可以不限。因为这个程序还在起步的阶段,还存在很多需要解决的问题,但是不管怎么说是个不错的开始。据我所知很多小规模的建模工具都要开发很多年,而我这个才2个多月,何况我这个项目只有我一个人在搞。急不得。

下面介绍一下历史:
大概是在2004年10月的时候我开始有自己编一个建模工具的想法。当时是要学DirectX,我觉得学编程必须要动手才行,所以想到写个像silo的程序。之所以要模仿silo是因为我当时觉得silo是一个面向使用的程序,它能够合理的把操作分配到左右手,感觉工作的效率提高了。另外一个原因就是silo是所有3D建模工具里规模比较小的。有了这个想法之后很长时间都没有什么进展,光磨了嘴皮子。不过在这段时间里我思考了很多东西。直到今年7月分毕业,我才重新开始写这个程序。我给这个程序起过好多的名字,最开始叫cedar,然后叫polygon studio,再然后叫clayshop,直到现在的pillow。这些都可以在我旧的博客上看到。

下面介绍一下程序:
因为最开始是为了练习DirectX,所以最早是想用c#和managed directx来写。当时还用过一个truevision3d的引擎。原因很明显,引擎里屏幕拾取等操作已经都给你做好了。但是因为引擎的数据结构特别大,效率很低,所以后来我就直接用directx来编了。而我现在的这个程序则是重新用c++和opengl写的。最开始有人问我为什么不选择opengl,我的回答是每一个图形库都很有学问,一个尚且学不好,怎么能顾得上学另一个。不过自从接触过opengl之后,我觉得opengl没有directx封装的利害,感觉用起来很直接。我真的很喜欢opengl。用c++的目的首先是因为要用opengl,当然tao framework我也试过,不爽。第二个原因是因为效率,交互性强的程序太需要效率了。第三个原因是因为我一直对c++不太开窍,有点不甘心。c++应该是编图形程序的首选语言。至于程序的界面,我选择了wxWidgets。我编程的时候特别会做表面文章,非常在意界面。我认为外观设计不是什么无足轻重的东西,如果苹果公司没有它的工业设计,这样一个不兼容的怪胎早就被淘汰了。不过很遗憾,我找不到满足我要求的c++界面库。我希望能够有一个跨平台,最好开源,可以换肤,控件比较丰富的界面库,但是没有。编这个程序的时候我先后用了cegui,wxWidget,qt4,但是哪个都不满意。最后选择wxWidget也是因为silo也用的是它。

关于程序的结构:
我的程序大体分成了三个层次,界面层负责和使用者交互,并且把操作的结果显示出来。中间的控制层负责管理整个场景,负责将图形的操作转换成对于数据的操作。这部分实际上是整个程序的核心。最里面的是数据层,存储的是场景的图形数据。场景管理器和数据层之间的交互被严格定义为一组命令,并且每一个命令都会被一个叫做历史管理器的东西记录下来,便于随时将操作进行回退。在图中,蓝颜色的箭头表示的是命令的走向,紫颜色表示的是记录命令,红颜色是显示数据的走向。
目前我的程序还不具备undo和redo的功能,但是实际上我在程序中已经实现了。但是和界面结合的时候我没有把这个添上。因为在和界面结合的时候,程序写的有点乱。之前对于如何实现程序的核心部分,我考虑了很长时间,但是和界面结合的东西我考虑的不多。另外也是因为没有找到一个我觉得很得心应手的界面包,而我又尝试了很多的界面方案,几乎每一种界面都有自己的一套编程风格。因为历史记录这个部分是比较容易出问题的部分,尤其是容易内存泄露,我就暂时没有把它包含进来。
当初要实现undo和redo的时候我想到要用命令的方式,每个命令都有个逆命令,操作的时候记录每条命令,需要回退的时候再调用相应的逆命令。但是很多操作,比如说求平均,是没有逆命令的。把求平均之前的情况都记录下来显然也是个比较笨的办法。后来我想到把操作分层,因为不管一个图形操作的过程有多么复杂,归根结底都是要改变数据,改变数据的方式无非就是添加、删除和改动这几种,所以我只要记录这些简单的操作,就可以应对复杂的图形操作了。实际上在我的程序中定义的简单操作要有几十种,并不只是添加、删除和修改这几种。
什么是历史管理器呢,实际上是一个队列和栈的结构,命令被压入一个叫undo的队列头部,如果超过了队列的长度,则从队列的尾部直接抛弃。如果用户想要回退一步操作,就直接弹出在队列头部的一个命令进行回退,同时把这个命令翻译成逆命令放到redo中去,这个redo是一个栈的结构,如果要重做这步操作就弹出redo栈,执行,然后把命令翻译成逆命令再次放到undo队列中。
要如何防止内存泄露呢,我的设计是这样的:把所有在堆中的数据的指针进行统一的管理,这个结构我叫做data pool,实际上是个动态数组。任何其它的操作只能够引用这些数据,引用是通过数组的下标,而不是指针。释放指针由这个data pool统一进行,有两种方式,一种是直接释放,另一种是当需要记录删除操作的时候,把这个指针交给历史管理器,然后当历史管理器也不需要这个指针的时候,再释放掉它的空间。这样就可以防止指针已经丢失但是空间没有释放的情况,因为任何时候被分配的空间都至少在data pool中保留了一个指向它的指针。然后通过data pool释放这个指针,就可以释放掉这个空间。基本上就是这样。

总结:
最开始我把我编这个程序的想法告诉别人,有人就问我,这个程序到底有什么创新的地方,既然天下多边形建模工具已经那么多了。应该说目前还没有,但是以后会有的。现在这个程序虽然很普通,但是这是今后创新的一个平台,未来有可能在这个基础上做一些真正自己的东西。通过编这个程序我学到了不少东西,也多了不少认识。我感觉c++是一个陷阱,确切地说指针是陷阱,用的时候觉得很方便,肆无忌惮。但是当程序大到一定程度,就会突然发现已经是千疮百孔了。处处都有可能造成泄露。但是一个图形的程序又怎么能不用指针呢。我也想过把它都换成smart pointer,但是不知道效率上会打多大的折扣。
我在我的网盘里面放了一个pillow的程序,但是有些bug还没有修复,我已经编不动了,要换换脑子。我很想自己写个界面,sdl和opengl的界面,但是无疑又是个巨大的工程,不知道能不能实现。

一些资源:
之前写的一个pillow的教程:
http://billconan.blogspot.com/2006/10/pillow-01a.html
以及一小段演示动画:
http://billconan.blogspot.com/2006/10/wink.html

Posted by: billconan | October 8, 2006

仙剑奇侠传3模型文件格式分析(2)

这个上接我这个博客的第一篇日志:仙剑奇侠传3模型文件格式分析(1)。实际上我真正看这个模型的时候好像是六月份。而写上一篇文章的时候在8月份。而这一篇拖了很久。我最开始想至少写3篇,因为虽然模型的扩展名是一样的,都是pol文件,但是实际上里面的数据有差别。比如说场景模型有个光照贴图的坐标,而在物体模型里面就没有。而现在主要分析的是物体的模型。我最初想写这个东西是因为我想要记录一下我当时思考的过程,结果倒是次要的。因为把仙剑奇侠转3的模型拆出来一看其实也就那么回事。但是现在隔的时间有点太长了,很多东西只能记得结论,当时怎么想的现在已经想不起来了。
上回说到发现一个模型文件可能会包含很多组模型,并且在头部0x08的位置有个数值记录了这个数目。这样通过分析拥有多个模型的文件和只有单个模型的文件可以得到模型的头部长。计算的方法是这样的:
假设整个文件有个公共的头部长度x,而每个模型有个自己的头长度为y,文件中包含的模型数目为c,假设一个只有1个模型的文件数据开始位置是a,一个有3个模型的文件数据开始是b,那么这样列个方程,就可以求出每个模型的头部长度。

x+y=a;
x+3y=b;

经过比较几个模型文件,我发现很多模型的数据开始的位置(0x58)都是1500 0000。这个是一个比较奇怪的现象,因为按照我先前的分析,这个应该是贴图坐标,但是这么多的模型的贴图坐标怎么可能这么一致呢?再发现,如果按照先前假设的,FFFF FFFF 是顶点信息的结束标志,那么为什么最后一个顶点(box.pol文件)的FFFF FFFF 后面紧跟着一个295C 7F3F 295C 7F3F ,而这个数据和前面一个顶点的295C 7F3F 00D7 233B 数据这么相像。所以我开始意识到,FFFF FFFF 应该不是顶点的结束标志。因为一开始我先入为主地认为顶点有结束标志,所以我认为在头部没有顶点的总数信息,但是现在看来应该是有的。由于已知这个文件中有16个顶点,所以一眼就能看到在顶点数据区前面,0x5c的位置上有个1000 0000 数值,这不正是顶点的数目么。这下也就说明顶点的数据开始于0x60,且0x5c是顶点的数目,FFFF FFFF 不是顶点数据的结束标志,顶点的结构应该是这样的:

struct vertex
{
float x;
float y;
float z;
int FFFFFFFF;
float u;
float v;
}

通过和其他的文件比较可以发现,每个模型的头部有24字节长。每个顶点数据区域最开始有个头,其中最后4个字节是顶点的数目。整个文件的头有56字节长,第5个字节开始是文件包含的模型数目。
按照这个理论把程序改了一下,发现贴图坐标也正常了。
所以现在的结论是这样的:

文件头
-文件标识
-不知道的内容
-文件所包含的模型数目
-不知道的内容
每个模型的头
每个模型的数据
-顶点的数据
–顶点数据区的头
–每个顶点的数据
—顶点位置坐标
—FFFF FFFF
—顶点贴图坐标
-贴图数据(固定长度)
-面数据
–面数据头(包含了面的数目)
–面的数据

按照这个理论实现的程序:
xj3Model.c
这个程序运行以后可以把仙剑3的模型转换成obj的格式。经过测试,可以转换90%的模型,还有很多2K左右的文件处理不了,估计是索引文件,我没有仔细研究了。导入到3D Max里面基本上就是这个样子:



总结:愣看文件格式需要耐心和运气,像我看这个模型格式的运气就在于有一个box.pol的文件,这个文件名给了我暗示。另外就是文件中存在的FFFF FFFF ,虽然我最开始的假设是错误的,但是些字节还是整个文件的一个突破口。不过真把模型拆出来觉得意思也不大,感觉这些模型做的挺普通的。有时间我会把拆场景模型的文章也补上。

Posted by: billconan | October 8, 2006

试验一下wink

昨天ShiningRay建议我做个视频的教程,今天试了一下他推荐的wink,确实是个好东西。只可惜我先前的截图不太连贯,只能下次再做点什么别的东西把它录下来。不过wink生成的文件实在是有点大,试了一下,演示了一些基本操作:

刚才试了好半天也没能让这个swf显示完整,一直以为是wink或者firefox的问题,结果发现是google pages上传的问题。难道有大小限制?现在这个用的我的网盘,慢且可能要统计流量。

Posted by: billconan | October 7, 2006

Pillow 0.1a的操作教程


这是我先前说要写的那个Pillow的教程,主要是要演示一下我这个建模程序的使用方法(程序我在我的网络硬盘里面放了一个,点击导航条的download可以下载,但是还有bug没有修复)。模型做的比较粗糙。这个是完成之后的效果,在3D Max里面简单渲染的:
在开始之前,我先介绍一下Pillow的基本操作。Pillow是一个模仿silo的程序,因而在操作方法上高度一致。silo把建模的操作合理分配到左右手,我觉得能很好地提高工作的效率。简单的来说是这样的:

alt健加鼠标左键拖动用来旋转视角
alt键加鼠标中建拖动用来平移视角
alt键加鼠标滚轮用来缩放视角
鼠标左键拖动用来单面选择
鼠标中键拖动用来双面选择
c为增加细分
v为减少细分
ctrl为沿视平面进行平移,前提是选择了物体
shift为增加选择内容
z为突出面或者边
w为移动模式
e为旋转模式
r为缩放模式
1-7为切换不同的视角
delete为移除点或边,其中点只能是有两个邻接边的点,这个操作目前有bug

Pillow的界面大概就是这样:
所有的操作都集中在菜单里面,而编辑窗口有几个我用opengl做的工具栏,这里面都是最常用的一些操作。把界面设计成这样是因为我曾经用过的一个silo的界面,记得当时我在cgercn发过(现在好像叫cgfinal了)。silo可以自定义部分界面以及快捷键,但是我这个还不行。左侧的按钮选择编辑物体的编辑层次。右面的是选择窗口的层次。上面一条是文件操作,建立新物体和编辑新物体,还有截图快捷键和帮助。下面是选择显示的形式和选择照相机的形式。

下面讲建模的过程:
我做模型的时候比较喜欢box modelling的方式,总是从一个盒子的形状开始,这样比较容易从大局上把握形状,但是也容易让人忽视掉细节。我做模型的时候比较喜欢用参考图。关于参考图,我的经验是从电影电视剧或者mv中去找,因为这样比较容易找到不同角度的参考,而如果直接去找照片的话,正面照好找,侧面照就比较少了。有了参考图之后,要对正面和侧面的图进行一定的缩放和旋转,使得它们的比例一致。在这个过程中我比较喜欢用photoshop的标尺,在photoshop中让两个参考图的下巴和头顶处于水平,鼻尖和眼睛的高度一样,还有嘴角和耳根也要一样。我的这个侧面参考图不完整,所以我用鼠标补了一些脑袋。对齐之后剪裁成两个高度一致的图。

然后开始建模了,首先就是要在Pillow中指定参考图(option->set viewport image),silo中可以直接用鼠标来调节参考图位置,但是我这个还不行,需要手动输入位置。然后新建一个box(create->cube)。然后对这个方盒子分别在前视图和侧视图中进行调节,使得在前视图近似为头的一半大小,在侧视图中刚好覆盖头部。调整好之后在透视图中删除中间的面,也就是说我们要镜像复制一个当前的模型,因为脸是对称的。点击菜单上的(create->mirror instance)复制出镜像,对称平面为默认。

然后按图进行切割,这个切割线分别对应了头的眼睛位置和耳朵的位置。目前Pillow只支持在一个边的中间进行切割,其实核心的程序允许在任意位置切割,但是和界面整合的时候我偷了点懒。然后将显示模式切换到线框模式,分别在前视图和侧视图中调节点的位置,使得这个造型和参考图近似。
可以随时对模型细分进行观察,目前Pillow在编辑模型的时候还不能实时地更新法线,主要是我还没有想好有什么快的局部更新法线的算法。所以如果想观察光照效果需要从菜单执行更新法线的命令(modify->updata normal)。然后新增加一条竖线,这条线要对应人的瞳孔和嘴角。

然后要不断的调节点的位置,使得模型接近参考图。现在继续切割出两条线,一条是在额头,另一条在嘴的位置。同样要在各个视图中调节位置。让线条过渡自然一点。

然后横向切割出鼻子,并且调节。随时可以细分进行观察。在调节好点的位置之后要切割出眼睛和嘴的大致形状。

然后在视图中调节,同时增加眼睛的细节。继续增加细节和调节点。调节点,可以用线框模式来显示,这样比较便于观察。

仍然是增加细节和调节点的工作。继续增加细节,但是这个时候要清楚线条的走向。建模有个原则–线条要符合肌肉的走向,就是图中我用红线画出来的线条。眼睛和嘴的线条要形成一个圈。


在增加线条的同时要不断切割出新的边,但是同时还要删除旧的边。因为我们是盒子建模,一开始的边都是横平竖直的,这个会对我们的最终模型产生一定影响。所谓盒子建模不容易把握细节,很大程度上就是这个原因。其实我觉得懂得如何删要比懂得如何添要重要的多。


如果你最后的成品依然有很多横平竖直的线条,那一定是很失败的作品。继续添加鼻翼附近的线条,这样也是为了增加嘴部的细节。


当嘴的细节到达一定的程度就可以进一步刻画了。要做出黑人厚嘴唇的效果。在眼睛的位置切割出更多的边。

在鼻子上切割更多的边,这个是为了增加细节好开出鼻孔。现在可以依据参考图开出鼻孔了。首先切割出一个矩形的区域。


在这个区域上使用突出(modify->extrude)几次,做出洞来,然后要调节点。时不时细分一下来观看效果。继续增加鼻子的细节,一方面要做出鼻翼凸起的效果,另一方面是修改三角面,尽量把三角面改成四边形。


继续制作鼻翼。现在增加眼睛周围的圈数,增加细节准备做眼睛。

不断调整眼睛周围点的位置,然后选中眼睛上的面删除。删除之后就形成了眼眶。

如果把握不好眼睛的造型,可以生成一个球体作为眼球,放在眼睛的后面作为依据。细致刻画眼睑的效果。


选中眼睛镂空的一圈边,然后将视角转动到头的里侧,按住z键,拖拽出眼睛没入脑袋的部分。继续调节点的位置,让模型有厚度,不是像面具一样只是一个面片。

这是目前侧视图的效果。将嘴上的一组面删除,将嘴裂开,同时增加更多的边,做出嘴唇鼓起的效果。


要在侧视图中进行调节,细分观察效果。做出镜像的效果观察。

调节脸型鼻子和嘴上的点。和做眼睛类似,选择嘴镂空的一圈边之后将视图转动到脑袋里侧,按住z键突出处一些面。

然后调节这些面。现在要做出下巴骨,不知道应该怎么说。让这个地方的线条更加明显,这个线条要成直角。


如图红色的地方,让点往里缩,这样可以显现出下巴骨的线条。然后要制作脖子了,选择脖子位置的面删除。然后再脖子镂空的地方,选择一圈边进行突出。


突出以后在前侧视图调节点的位置,使得它们契合参考图。不要忘了在透视图中进行调节。注意途中红线的位置,这个地方要做出一个凸起。

如图增加细节,做出凸起的效果。调节,细分。

换个角度。复制出镜像来观察。

下面做耳朵,在侧视图中删除耳朵位置上的面。在侧视图中调整出一个耳朵的轮廓。选择一个边突出一小部分,然后以这个突出的部分为基础按照图中的顺序继续突出记下,形成一个耳朵的轮廓。

还要到头视图里面调整这个轮廓的位置。然后细分进行观察。

这个地方我做的比较糙。实际上应该做出耳朵里面的褶皱,但是我偷懒了。我这里简单的把耳朵的轮廓进行了延展,然后焊接,也就是把上面的框框给封起来了。不要忘了调整耳根后面的点,这个地方的点要往里收缩。

这个时候要把脑袋后面一些刚才忽略的细节给补上。基本就算完成了,然后细分一下,使一个重新定义控制点(subdivision->redefine control mesh),把模型定格在细分的状态,如图:

Posted by: billconan | October 7, 2006

musicbox 0.1a

刚才在找适合博客用的flash播放器,找到几个比较不错的,但是粘贴的代码比较繁琐,参数比较多。所以想到干脆写个简单的javascript。这个script的下载地址是:
http://billconan.googlepages.com/prototype.js
http://billconan.googlepages.com/musicbox.js
下载这两个js文件,还需要这个flash播放器文件:
http://billconan.googlepages.com/player.swf
这个播放器是一个wordpress插件中的,详细情况请看官网:http://www.1pixelout.net/code/audio-player-wordpress-plugin/
下载以后需要设置musicbox.js文件里面的路径,成功以后上传到一个稳定的空间,比如google pages,然后在blogger的模版上添加这两个js文件就行了。其实也可以直接用我空间上的js,但是如果哪天google pages被封杀了,这个也就失效了。
使用的时候只需要这样写:

我只试过mp3的,应该也就支持mp3格式。
新版blogger有不少bug,比如在body中加onload可能会让navbar消失。哎,麻烦!

Posted by: billconan | October 7, 2006

用google的code search偷窥别人密码


前几天google推出代码搜索的时候我觉得没什么用处,今天看到个消息说可以用来查看wordpress的密码。好主意!我搜了一下,出来不少,全都是zip文件或者tar.gz文件里的代码。有的人给自己的博客作了个备份还上传到网上,结果被google偷看到了。不过这些站点都比较敏感,已经删除了备份,更改了密码。看来以后又有的玩了,不知道还能用这个找到什么东西。rar比较安全啊,以后要少用zip文件。

Posted by: billconan | October 6, 2006

一段美国校园枪击事件的视频

今天看到一段视频很恐怖。已经很久没有被这样吓到过了。这个视频讲述了美国一次校园枪击事件。后来了解到这段视频是一部电影的一部分,心里能稍微舒服些。这个电影讲述的是99年哥伦比亚高中的一次枪击事件。据说真实的录影要比这个更加恐怖和混乱。这个电影的官方网站在这里:http://www.zerodaythemovie.com/。导演能想到用监视录像的视角来讲述事情的经过,的确很有想象力。直到现在还有不少人在讨论这个视频是真是假。这是关于这个真实事件的介绍:1999年4月20日两个哥伦比亚高中学生冲进校园,用半自动武器、鸟枪和一批爆炸物杀死了1位老师,12名学生,然后自杀。另有26人受伤。当日11时19分,两名学生来到校外。其中一名大叫“出来!出来!”并当即向5名学生射击,造成两人死亡。随后,持枪者向门窗射击并将自制的炸弹扔上房顶。持枪者随之进入图书馆进行屠杀。最后两名凶手自杀身亡。哥伦比亚高中惨案美国历史上最严重的枪击事件。据说关于这个事件有个纪录片,叫做《Bowling for Columbine》。里面有真的录像,场面比这个乱,两人在食堂扔手榴弹也被拍下来了,食堂一角都着火了。叫这个名字是因为这两个杀手在开枪行凶以前还去打了场保龄球。真是挺变态的。
最近很关注类似youtube的网站,浪费了不少时间。

Older Posts »

Categories