行者无疆 始于足下 - 行走,思考,在路上

opengl 第一篇

还是蛮漂亮的。

linux的opengl的开发配置可以参见这篇文章。还是蛮简单的。开发环境和程序的完成大概用了一下午的时间。不过我现在还不太opengl和mesa, freeglut之间到底是啥关系。不管了。先用着吧。archlinux下的开发配置非常简单:

sudo pacman -S freeglut mesa

 源代码如下:

#include <GL/glut.h>
#include <stdlib.h>
#include <math.h>


#define PI 3.1415926
#define R 1
#define r (sqrt(3) / 3 * R)

void redraw()
{
    double origin[] = {0.0, 0.0};
    double colorMode1[6][3] = {       //六角星最外层顶点各自的颜色
        {1, 0, 0},
        {1, 1, 0},
        {0, 1, 0},
        {0, 1, 1},
        {0, 0, 1},
        {1, 0, 1}
    };

    double colorMode2[6][3] = {       //六角星内层顶点各自的颜色
        {1, 0.5, 0},
        {0.5, 1, 0},
        {0, 1, 0.5},
        {0, 0.5, 1},
        {0.5, 0, 1},
        {1, 0, 0.5}
    };
   
    glClear(GL_COLOR_BUFFER_BIT);
    int i;
    for (i = 0; i < 6; ++i)          //  把这个凹多边形分解成为六个菱形旋转变换组合而成,通过给每个顶点设定不同的颜色达到颜色渐变的效果
    {
        glBegin(GL_POLYGON);
        glColor3f(colorMode1[i][0], colorMode1[i][1], colorMode1[i][2]);
        glVertex2d((R * cos(PI / 2 + (i * PI) / 3)), R * sin(PI / 2 + (i * PI) / 3));
        glColor3f(colorMode2[(i + 5) % 6][0], colorMode2[(i + 5) % 6][1], colorMode2[(i + 5) % 6][2]);
        glVertex2d(r * cos(PI / 3 + (i * PI) / 3), r * sin(PI / 3 + (i * PI) / 3));
        glColor3f(1.0f, 1.0f, 1.0f);
        glVertex2dv(origin);
        glColor3f(colorMode2[i][0], colorMode2[i][1], colorMode2[i][2]);
        glVertex2d(r * cos(2 * PI / 3 + (i * PI) /3), r * sin(2 * PI / 3 + (i * PI) / 3));
        glEnd();
    }
    glutSwapBuffers();
}

int main (int argc,  char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    int windowHandle
        = glutCreateWindow("Simple GLUT App");

    glutDisplayFunc(redraw);

    glutMainLoop();

    return 0;
}
 

编译:

gcc -I/usr/include -L/usr/local/lib -L/usr/lib -lglut -lGLU -lGL -lX11 -lXext -lXmu -lXi -lm filename.c -o filename

 

今天买了三本书

第一本:货币战争。

第二本:C++程序设计原理与实践。

第三本:Unix编程艺术。

共131.8元,花尽了钱包里的所有钱,一分不剩。印象中好像好久没有这样买过书了。尽管我的书已经不少了,多的连宿舍的书架都放不下了。

这一周整个人就像一部机器一样在运转。上周五开始做作业。先是完成了导师布置的任务——写一个iphone下的hello world程序。坦白的说,有些时候我是很随意的,有些时候又过于吹毛求疵。这么一个任务,我看了网上的数十篇文章,下载了十几篇pdf电子书,经过筛选总结最后写出了一份精美的带有目录,索引的达27页的英文文档。题目叫The Cross-Platform Developing Skills for Mac Applications给导师发了过去。可是导师实在是太忙了。没有时间看我的文档。只是今天中午交谈的时候看到文档,简介大气,还是称赞了一下,呵呵。

周日和周一都在补计算几何的知识,用的教材是Computational Geometry in C,刚开始还好,越到后来越难。布置的作业也都很有难度。导致我两天下来才做了十道题。虽然迟交了几天,但总算是弥补了。交总比不交好。交的作业是用latex写的。画一些几何图形,顺便学了学pfg\tikz的用法。真的很不错。如下面的代码: 

\begin{figure}
\centering
\begin{tikzpicture}[line width=2pt]
\draw (-1,0) -- (8,0);
\draw (0,-1) -- (0,8);
\draw[step=.5cm, very thin] (0,0) grid (7.2,7.2);

\coordinate [label=above:$A$] (A) at (1, 4);
\coordinate [label=left:$B$] (B) at (0.5, 3.5);
\coordinate [label=left:$C$] (C) at (1, 3);
\coordinate [label=left:$D$] (D) at (0.3, 1.3);
\coordinate [label=below:$E$] (E) at (1, 1);

\draw[blue] (A) -- (B) -- (C)  -- (D) -- (E);
\draw[blue] (2, 0) -- (2, 6);

\coordinate [label=right:$A'$] (A') at (2, 4);
\coordinate [label=right:$B'$] (B') at (2, 3.5);
\coordinate [label=right:$C'$] (C') at (2, 3);
\coordinate [label=right:$D'$] (D') at (2, 1.3);
\coordinate [label=right:$E'$] (E') at (2, 1);

\draw[blue] (A) -- (A');
\draw[blue] (B) -- (B');
\draw[blue] (C) -- (C');
\draw[blue] (D) -- (D');
\draw[blue] (E) -- (E');

\coordinate [label=above:$a$] (a) at (5, 4);
\coordinate [label=left:$b$] (b) at (4.5, 4.5);
\coordinate [label=left:$c$] (c) at (5, 3);
\coordinate [label=left:$d$] (d) at (4.3, 1.3);
\coordinate [label=below:$e$] (e) at (5, 1.3);

\draw[green] (a) -- (b) -- (c)  -- (d) -- (e);
\draw[green] (6, 0) -- (6, 6);

\coordinate [label=right:$a'$] (a') at (6, 4);
\coordinate [label=right:$b'$] (b') at (6, 4.5);
\coordinate [label=right:$c'$] (c') at (6, 3);
\coordinate [label=right:$d'$] (d') at (6, 1.3);
\coordinate [label=right:$e'$] (e') at (6, 1.3);

\draw[green] (a) -- (a');
\draw[green] (b) -- (b');
\draw[green] (c) -- (c');
\draw[green] (d) -- (d');
\draw[green] (e) -- (e');
\end{tikzpicture}
\caption{Monotonic polygonal chains}
\label{fig:monotonic_chain}
\end{figure}

经xelatex处理的图形如下:

pgt/tikz

还有algorithm, algorithmic宏包,用来排版算法伪码效果非常好。我估计<<Introduction to Algorithms>>上的伪码就是用的这个。latex源码如下:

\begin{algorithm}
  \caption{Determining whether or not P is convex}
  \label{alg:convex}
  \begin{algorithmic}[1]
    \FOR {$i = 1$ to $n$}
    \STATE $j \gets i \bmod n$
    \STATE $p \gets \overrightarrow{V_{j-1}V_j} \times \overrightarrow{V_{j}V_{j+1}}$
    \IF{$p < 0$}
    \PRINT "Polygon P is not an convex polygon!"
    \RETURN \FALSE
    \ENDIF
    \RETURN \TRUE
    \ENDFOR
  \end{algorithmic}
\end{algorithm}

排版效果(博客中上传的图片貌似都有压缩,效果稍差):

昨天无意间又发现了cdlatex这个东西,至此,emacs+cdlatex+auctex+reftex+outline+xetex,这些东西组合起来,感觉写文档非常美妙。在文档中穿梭,有时间,等我通晓elisp后,在来总结这些东西。再上一张图。

emacs latex editing environment

这不,今天写实验报告又碰见了数据的图形化,顺便复习下gnuplot。kiss the unix。

下午在老板公司,和学长简单交流了下,自己在一边搞定上网,大概看了下windows ce的东西。不过现在感觉自己最大的软肋还是编程基础和算法基础。看书看书看书。

明天的数值分析,逻辑,后天的计算机组成实验,都是头疼的课。我一向对电类的课程比较头疼。电路原理,数电等硬件类课程无一例外都挂掉了。一方面是自己没好好学,另一方面也是自己实在提不起兴趣。比较讨厌。逻辑实验虽然七搞八搞能做出结果,但是个中详细原理,却懒得去理了,只求用latex把实验报告弄的好看点,祈求得个差不多的分数就行。

C++之父Bjarne Stroustrup的最新力作<<Programming: Principles and Practice Using C++>>,刚翻了翻目录。讲的内容非常广泛。从最初的入门知识,语言结构,面向对象,stl,gui,embedded, testing,不知深度如何。书中前言说:If you work by yourself, don't expec to spend less time than that(maybe 15 hours a week for 14 weeks)。

Unix编程艺术,经典书籍,久闻其名,今天终于狠下心买了一本。当小说来看好了。

越学越不明白。计算机软件简直是无边无际无极的知识海洋。技术的更新,理论的发展,这些独有的特点使得计算机应用科学的知识更新换代极其迅速。我想在大概明白所谓的需求驱动。计算机的学习也是一样,什么样的需求,什么样的技术,用到了再去学,边学边实践。像什么asp pk php等等完全是无聊的东西。有需要就学,没有这个需要的话学了不用也忘掉。当然有些经典的东西,c++, unix, emacs, latex, algorithms, sql, xml, 这才是千秋万代的东西。加油吧,lox。

左手马云,右手史玉柱

左手马云,右手史玉柱

晚上在看的书,很不错,尤其是马云创业初期的故事,读罢令人新潮澎湃。正如我的操作系统老师lsp所讲,干事业需要七种能力:

  1. 技术
  2. 组织能力
  3. 领导力
  4. 沟通能力
  5. 英语能力
  6. 好助手
  7. 亲和力

我越发感到,技术只是一个很小的环节,局限于技术,会使自己的眼界变得狭小,失去很多东西。越来越多的例子表明,一个真正的技术天才,很少能够获得开创性的成功。成功的花儿,人们只惊慕它现时的明艳,然而当初它的芽儿,浸透了奋斗的泪泉,洒遍了牺牲的血雨。多一种经历总是好的。人生是一个三维空间,起起伏伏,人生才精彩,否则只是一个x+y+z = 0的平面罢了,甚至只是一条直线。

上午的操作系统研讨很精彩,Time-sharing, distrubuted system。下午回到寝室,继续看Gnu tools系列教程。这次看的是陈皓写的《跟我一起写Makefile》。早先暑假的时候也看过一点,但是没有深入下去,大概了解了make的原理。这次是由于实验室任务需求,才硬着头皮继续钻研下去。今天主要看了看自动化变量、隐晦规则、函数等内容。深入的了解说不上,毕竟需要大项目的实践经验才行。偶然又知道了Cmake, 看了一些介绍的ppt和教程,如《猫也会的CMake》。貌似很有前途的样子。

很悲剧的是MSTC的面试悲剧了。分析原因可能有两点,一是技术不够,很多人报名表格就被刷了,而且MSTC里面确实高手如云;二是面试的时候没有表现出足够的诚意。精诚所至,金石为开,对于这次的面试,我并没有做过多的准备。有些遗憾,毕竟是很好的一个交流平台,一个认识高手提高自己的机会。不过话又说回来,做人做事总不能这么功利的。

C++好久没用了,都快忘光了。找个时间,重新啃下Primer。自己的算法基础还是不够牢靠,总说自己没时间,大概是个借口。MIT4个G的算法导论课堂视频,在近期的看书计划中。

最近又陷入了半迷茫期。有时候想想,技术不是最主要的,个人的魅力、魄力、人格、品行、阅历,这些才是最重要的东西。最重要的是阅历和魄力。

又不知道写什么了。看书。抓紧时间看书。

国庆一周

2号ZZF携家属来杭,上午陪着走了苏堤,中午到了雷峰塔,他们买票进去,我一个人回YQ睡了一觉。五点不到,WM来到YQ,给我带了两件The North Face的衣服,汗……让我想起了去年暑假在四川甘孜逛街碰见五十块钱一件的TNF羽绒服。晚上在留食一起吃了饭,99元,我埋单。 

晚上俩人去游泳,闹了点小别扭,直接导致我3号一天的萎靡状态,看了好几部电影,《绝命速递》真不错,男主角很帅。

4号去HJC赔礼道歉。天气不错,是我来杭州两年碰见的最好的天气,荡舟池上,心旷神怡,一切烦恼随风而去。

5号WJ也来到杭州,中途交接出了问题,我去城站,他却在汽车东站下了车……于是一起打的到HJC图书馆。中午WM请客,89元8个菜,留食,很是实惠,非常完美。下午划完船后回到YQ,晚饭在北门外边一农家土菜馆,土豆炒的不错。晚上去游泳,被BS了,悲剧……回到寝室已经十点,简单拾掇下就睡了。岂料室友兴奋过度,滔滔不绝侃到夜里三点多……直接导致六号两人都是中午才起床……

6号下午两人去之江看潮,只看到了钱塘江人潮……人潮散去,车也坐不到,遂沿九溪走到龙井,回到人间,上了公交。完饭在河坊街高祖生煎,67元,比较完美。饭毕逛河坊街和新开的南宋御街。来到杭州两年多第一次来这里逛。还是挺有特色的。

7号早起去植物园玉泉鱼跃看鱼,大开眼界,一米多长的青鱼,第一次看到这么大的鱼……临近中午公交去灵隐,其实我对灵隐不怎么感兴趣……中途逃票失败,花钱若干,不在赘述。灵隐寺里面碰见一小姑娘,义务导游,拿着本资料带我们在寺庙里面转。交谈中得知是浙江工商大学的大一新生,在下沙,学电子商务。竟然还在学linux,于是留了联系方式,说以后有问题可以找我。晚上去河坊街吃了正宗的杭帮菜。WJ埋单。饭毕走路去火车站,十五分钟,恰好剩下一张T字头车票。候车半个小时,就此分别。WJ的第三次杭州之旅到此结束。

8号回到寝室,看了一天的资料。GNUstep、Cocoa API。导师布置的任务:在linux或windows平台下写一个hello,world的ihpone程序。现在初步解决:

  • 苹果系统开发体系的了解——我没有mac,只能了解。
  • archlinux下交叉编译环境的建立。
  • GNUstep的安装和初步使用。
  • Windows Maker配置成功。

接下来需要解决: 

  • Objective-C的学习。
  • Makefile的深入研究。
  • GNUstep程序向Cocoa体系的迁移。

还有操作系统的一篇关于进程和线程的论文,以及计算几何的作业,呃……

十一前看了gentoo的安装指导,打印纸质版,56页,这两天在看lpi的study guide,找个机会把lpi1考掉。加油加油。

咱也是有老板的人了

这是咱的老板.

玉泉是个好地方.人间天堂,求学圣地,还有一个硕大的西湖作为后花园--虽然我们很少去.这两天忽然意识到,搞计算机的,与别人交流讨论是件很重要的事情. 就像Arch的安装,我想如果没有室友的帮助,我大概到现在还在摸索该如何配置命令行下的网络和vpn呢.说不定就一动摇,回到了ubuntu的怀抱了.用了还不到一个刑期,arch的优势就体现出来了.轻快,干爽,便捷,简单. 前两天的问题基本解决,有时间整理出一份笔记吧,记录一下Arch安装过程中碰到的各种问题及其解决方案.

用上了AUR,解决了软件丰富性的问题. 系统时间也对了,原来是UTC设置的问题. 呵呵. 学到了不少东西. framebuffer, grub, gdm, 原先这都是各自分工的. 刚才去http://www.gentoo.org上搞了份gentoo安装文档下来,打算打印出来,好好研习研习, 提高下linux内功.

数值分析讲到了牛顿插值. 我花了一个通宵的时间做了个ppt, 用的是LaTeX+Beamer, 也是现学现卖, 效果看起来还不错.

操作系统作业开始涉及到Unix系统调用的问题了, 看来得整一本Unix环境高级编程看看.

老板给我布置了一个小题目, 就是让我搞明白IPhone平台开发的一套东西, 争取写个Hello,world出来. 刚上网简单查了下, 备选关键词: GnuStep, Object C, Iphone tool chains. 这可是展现咱动手能力的大好机会啊.

旅行者的社团我已经无心顾及,前两天讨论想成立个新的社团将行者延续下去, 不过我是没这个精力了.只是哪天在zjg和大家共七人谈的很痛快, 恩, 就靠你们了. 争取将旅行者的网站尽快弄完. 都拖了这么久了.

效率至上的生活!




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee