Posts Tagged ‘CG

这篇文章来源于Standford Univ.的CS148课程的第一周Assignment,作业内容是要求用基本的OpenGL的图元绘制知识来创作一些有趣的图形。 一、Knoch Snowflake介绍 我选择的是绘制鼎鼎有名的Koch Snowflake,它是最早有描述的分形图像之一,因为形状类似雪花且每一边都是基于Koch Curve而得名。从本质上来说,Koch Curve的构建可以用优美的递归形式来描述: 一条线段平均分成三段, 基于中间那条线段的位置绘制一个等边三角形,并且指向线段的外侧, 移除该条线段 而Koch Curve正是通过有限次地不断重复以上三步所得到的曲线,下图展示了递归0-4次时的曲线: Iteration 0:   Iteration 1:   Iteration 2:   Iteration 3:   Iteration 4: …… 二、绘制Koch Snowflake 那么应该如何利用OpenGL的基本图元(Primitives)来绘制呢?一开始的时候我设想的是根据预期的迭代次数,找到一个通用公式,从而计算出对应的顶点坐标,然后再用GL_LINE将它们连接起来即可,但是找到这么一个公式比较困难。突然我想到了小时候玩的logo语言,利用代码控制屏幕中小乌龟的位移,它走过的地方就画出一条线,基于Koch曲线如此优美的递归定义,用这种一笔画的方式来绘制,就会非常方便。为了采用这种方法,我们需要定义下列两个绘制函数: draw_line用于从当前位置绘制一条长度为length的线段 turn将改变当前画笔的方向angle_in_degrees个角度,根据图形学的惯例,逆时针(counterclockwise)方向为正 这两个方法的实现将会在下文简述 C++语言: 绘制函数 // drawing functions void draw_line(double length); void turn(int angle_in_degrees); 有了绘制函数和Koch曲线的递归定义,要画出它来就非常简单了: C++语言: 绘制Koch Snowflake void koch_curve(unsigned order, double length) { [...]


About this blog

I'm now a graduate student of Computer Applied Technology in Tongji University. I like Computer Graphics, Web 2.0, Magic, Music and am partially a geek. This blog is about C++, algorithm, cg, comments and other things I may get in touch with in the near future. Hope everyone enjoy this little site. Contact me: 4everlove.xu AT gmail.com

Photostream

日历

2012 年五月
« 二    
 12345
6789101112
13141516171819
20212223242526
2728293031  

TwitterWidget

1 小时 ago
@kenny_yuan “对不起,你所在的地区不能观看这个视频”:(Fav一下晚上回去看
view tweet
1 小时 ago
@kenny_yuan 求瞻仰
view tweet
4 小时 ago
@Hanliinter 我是科学学位硕士……你是不是看花眼了
view tweet
4 小时 ago
@Hanliinter 哈哈,cong!其实从你拿到密码开始,你的命运就已经决定了
view tweet
16 小时 ago
@r475 @omi0604 哇,打听到了快看看可不可以也把我们拉上~
view tweet
16 小时 ago
@hanliinter 老贾是你的答辩主席……=-=
view tweet
16 小时 ago
@r475 因为快一年了只见过一次TAT
view tweet
16 小时 ago
@omi0604 在装修之前暑期档是没有次卡的,次卡只是10.30~4.30才有,不知道装修好以后政策会不会有变。我觉得充值卡太不划算了,所以现在在犹豫中
view tweet
16 小时 ago
@omi0604 你准备搞个人卡了吗?
view tweet
16 小时 agoview tweet
Follow me!

FeedBurner RSS