Smoke3D 1.0 released

smoke3d_10.jpg

图形学作业最终DEMO2,真正的3D烟雾效果(CPU运算)。因为运算量大,所以网格粗糙,视觉上没有2D的细腻。
到此下载:Smoke3D_1.0.rar

ps.这个DEMO对显卡没什么要求,但要流畅运行你的CPU必须足够快。玩过的别忘留言附上你的CPU型号和程序运行时的FPS(画面左上角),我的本本P4 1.6G跑15FPS。

操作方法:
方向键 --移动视野
按住鼠标左键拖动 --转动视野
Z --在立方体中心增加烟雾
W/S/A/D/Q/E --向各方向“吹”烟雾
R --清除烟雾
P --暂停
Esc --退出

WaterSurface 2.0 released

watersurface_20.jpg

图形学作业最终DEMO1,增加了瓷砖质感的水池、更加逼真的反射折射、二维火球效果。
到此下载:WaterSurface_2.0.rar

ps.没有独立显卡、显卡超级老的没法玩,请按Esc退出。

操作方法:
方向键或W/S/A/D --移动视野
按住鼠标左键拖动 --转动视野
R --激起水波
T --创建水滴
Y --创建火球
P --暂停
0/1 --更换烟雾显示的文字
Esc --退出

smokeFFT v1.0 released

数字信号处理的大作业,FFT在流体模拟中的应用。实现方法参考了大牛Stam的论文,据说伊首先在CG领域引入semi-Lagrangian,才有了今天的real-time流体模拟。据说电影《Shrek》里面的烟雾特效就是这个算法,嘿嘿~

这个程序对显卡没什么要求,欢迎大家下载来玩:smoke_fft_v1_0.rar

操作方法:
1.按住鼠标左键拖动可以产生烟雾和流动。
2.按R/T,G/H,B/N键可以调整烟雾颜色(红、绿、蓝色的比例),左上角有提示。
3.按上下翻页键(PageUp/PageDown)可以调整拖动产生的烟雾量。
4.按P键暂停流动,此时仍旧可以“画”烟雾。
5.按0/O键清空屏幕。
6.按Esc退出。

smokefft_1.jpg

smokefft_2.jpg

模拟水面

图形学作业据说做好了可以免期末考试:)

我用openGL做了一个实时水波模拟,基本方法是网格,只有反射和半透明,效果还好,下一步是增加折射、Perlin Noise、溅起水滴、水下观察的效果。

网格法的缺陷就是不能模拟过于激烈的水面运动、海浪等,所以模拟自然运动的水(比如水从水杯中倒出的近距离效果)就要用粒子系统。初步查了一下,可能用到流体力学N-S方程、SPH、隐函数表面抽取。要学的东西太多了......不知道这学期是不是能完成。

water_surface_1.jpg

有兴趣下载来玩玩:water_surface_1.rar
显卡好的,请在高分辨率下运行,否则水波运动过快效果不好。


update 2007/4/11:
操作说明:请在Windows系统下将压缩包中所有文件解压缩到同一目录,然后执行water_test。运行后的窗口有分辨率选择和提示说明。

回家了

暑期课终于结束了,做完了可恶的作业后,我回家了。

虽然说是家住北京,但是平时由于周末有双学位的课程,一个学期都不能回家几次。这次回家陪陪父母、姥姥。

我发现自己有一种癖好,又或者是一种心病。如果一项工作没有完成,我就会不停的想它,无论吃饭甚至睡觉。尤其反映在写程序上,如果晚上写程序到很晚还没有搞定,那么睡觉的时间就不会超过5个小时,因为根本睡不踏实,做梦也在想算法。可能是一种强迫症吧,或者工作狂?

暑期的图形学课作业就折腾了我好久。贴张图,这次的一个程序--模拟光照明方程和的Phong着色法,效果还算满意。

Phong着色法

我恨微软!

Bill_Gates.jpg今天花了一下午用VC+openGL写图形学那个扫描线算法,本来想着用STL现成的list的就行了,没想到list.sort()那个函数竟然不能接我写的函数对象,总是说不能把这个对象转换为greater。我调啊调,还是那句话,就晕了,这和greater有什么关系?难道我用错了?去翻Bjarne Stroustrup的蓝宝书TCPL,上面写的自认为和我的做法没区别。

无奈,google一下,N多人在问:how do I use STL's list's sort method (the one that takes a parameter)... 就是没人答得沾边,好不容易看一个人回复了一段可是work around的程序,读了半天发现是他把list倒腾到vector里面排序再倒腾回去。我当时就想抽他~

最终我看到了最让人郁闷的网页,来自可爱的Microsoft...
BUG: The STL list::sort() Function Doesn't Sort a List of Pointers

原来VC6的STL代码里面
template ;
void sort(Pred pr);

错写成了
void sort(greater pr);
导致无论什么参数传进去,编译器都愣要转成greater
RESOLUTION里面说的解决办法和没说一样,重载greater...所以我一气之下,干脆把greater直接当小于号用了,微软都这么干,我怕什么啊!

MS写代码的人啊,你rp哪里去了!记得上次就是因为STL库里面的另外一个BUG,让友元都不能访问私有成员,也让我调半天。没想到VC6打了sp6也不管用,还有这么严重的BUG。一看时间——Last Review : July 5, 2005,VC6推出都多少年了?

一个下午就这么过了,我恨微软!!!

小学期开始

小学期应同学请求,选了一门通选课,有点类似计算机图形学,具体说是做openGL。

老师讲课超无聊,不是念ppt就是小声叨叨,一听还就一下午,我已经准备经常撬课了......

openGL这东西可是从来没搞过啊,估计挺复杂的。这次还要做大作业,先要想个合适的题材和创意才行。

手头还在给导师打工弄实验室的论文检索系统,假期也不清闲啊......

还有就是,我恨Perl,后悔当初了,应该坚定的坚持用php的,现在就不会有module、package、hash数组引用这些让人头大的麻烦事。