随笔-38  评论-23  文章-0  trackbacks-0


当看完这一课之后,我开始感觉我对OpenlGL有了一定基础了.我不知道为什么.我能够很好理解它.
lesson_9当中并没有多大新的知识.全是我们之前所学的.却需要完整的组织起来.希望它产生一个漂亮的图形.

初看小星星的德数据结构,我并为能够得出全部的东西.
typedef struct {
 GLint r,g,b;
 GLfloat dist;
 GLfloat angle;
}stars; 最初看到这个数据结构的时候我以为星星应当是个点.结果我错了.因为我看完之后我忽然明白了不管我们组织任何的图元,我们都可以将它看成"点".而最后在于我们如何来表示这个点罢了.矩阵变换也是基于点.
就像是像素一样.我们始终会认为它仅仅只是个像素点.然其实应该是个具有面积的小方格.
所以星星的表示.这一课我们也需要使用小方格.这不仅用在这里.也将用于许多许多.如粒子.等.
而这一课也给了我一个空间感很强的变换操作,这让我更倾向于使用局部坐标系来考虑整个变化的过程.因为这让我更能明白 我最后所绘制的图形的位置.

对于每个星星我们需要一个小正方形来表示.结果在此贴上星星的纹理,在配合混色操作就能达到非常完美的效果.我们看代码:我希望我的注释能够非常易懂的明白:

        /** 以下变换的目的在于,我可以使得星星距离中心dist的一圈,因平移x位移时候,x轴已经被旋转至一定方向了*/
        glTranslatef(
0.0,0.0,zoom); /** 深入屏幕里面*/
        glRotatef(tilt,
1.0,0.0,0.0);/** 倾斜角度..x轴 */

        glRotatef(star[loop].angle,
0.0,1.0,0.0); /**当前星星所在的角度*/
        glTranslatef(star[loop].dist,
0.0,0.0);/** x轴平移 */

        glRotatef(
-star[loop].angle,0.0f,1.0f,0.0f); // 取消当前星星的角度
        glRotatef(-tilt,1.0f,0.0f,0.0f); // 取消屏幕倾斜

而对于每个星星若要启动闪烁效果.我们只需要为它绘制两次.以达到一个看起来是在闪烁的效果

总体代码如下:
lesson_9

效果图:


posted on 2009-08-08 17:48 米游 阅读(429) 评论(1)  编辑 收藏 引用 所属分类: OpenGL/OSG

评论:
# re: opengl学习 nehe opengl lesson_9 2009-08-20 21:48 | 李海威
你更新了几课,我就看了几课了。 希望继续更新啊。多谢了。  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理