Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->Delphi ->正文

NeHe的opengl教程delphi版(9)----星星

来源:Linuxdby.com 作者:Webmaster 时间:2007-06-05 点击: [收藏] [投稿]
{
欢迎进入第九课。到现在为止,您应该很好的理解OpenGL了。
『CKER:如果没有的话,一定是我翻译的罪过......』。
( myling补充道:我的罪过更大,呵呵)
您已经学会了设置一个OpenGL窗口的每个细节。
学会在旋转的物体上贴图并打上光线以及混色(透明)处理。
这一课应该算是一课中级教程。
您将学到如下的知识:在3D场景中移动位图,并去除位图上的黑色象素(使用混色)。
接着为黑白纹理上色,最后您将学会创建丰富的色彩,
并把上过不同色彩的纹理相互混合,得到简单的动画效果。
我们在第一课的代码基础上进行修改。先在程序源码的开始处增加几个变量。
出于清晰起见,我重写了整段代码。
}

Var
   h_RC             : HGLRC;            // Rendering Context(着色描述表)。
   h_DC             : HDC;              // Device Context(设备描述表)
   h_Wnd            : HWND;             // 窗口句柄
   h_Instance       : HINST;            // 程序Instance(实例)。
   keys             : Array[0..255] Of Boolean; // 用于键盘例程的数组

   {下列这几行新加的。
   twinkle和 tp是布尔变量, 表示它们只能设为 TRUE 或 FALSE。
   twinkle用来跟踪 闪烁 效果是否启用。
   tp用来检查 'T'键有没有被按下或松开.
   (按下时 tp=TRUE, 松开时 tp=FALSE).}
   twinkle          : Boolean;          // 闪烁的星星     (新增)
   tp               : Boolean;          // 'T' 按下了么?  (新增)
   {现在我们来创建一个结构。
    结构这词听起来有点可怕,但实际上并非如此。(就是delphi的纪录类型)
    一个结构使用一组简单类型的数据 (以及变量等)来表达较大的具有相似性的数据组合。
    我们知道我们在保持对星星的跟踪。
    您可以看到下面的就是 stars;
    每个星星有三个整型的色彩值。一个红色 (r), 一个绿色 (g), 以及一个蓝色 (b).
    此外,每个星星离屏幕中心的距离不同,
    而且可以是以屏幕中心为原点的任意360度中的一个角度。
    dist的浮点数来保持对距离 的跟踪.
    angle的浮点数保持对星星角度值的跟踪。
    因此我们使用了一组数据来描述屏幕上星星的色彩, 距离, 和角度。
    不幸的是我们不止对一个星星进行跟踪。
    但是无需创建 50 个红色值、 50 个绿色值、 50 个蓝色值、 50 个距离值
    以及 50 个角度值,而只需创建一个数组star。}
Type
   stars = Record                       // 为星星创建一个结构,结构命名为stars
      r, g, b: integer;                 // 星星的颜色
      dist: GLfloat;                    // 星星距离中心的距离
      angle: GLfloat;                   // 当前星星所处的角度
   End;
Var
   star             : Array[0..49] Of stars;  // 使用 'stars' 结构生成一个包含 50个元素的 'star'数组

   {接下来我们设置几个跟踪变量:
   星星离观察者的距离变量(zoom),
   我们所见到的星星所处的角度(tilt),
   以及使闪烁的星星绕Z轴自转的变量spin。
   loop变量用来绘制50颗星星。
   texture[1]用来存放一个黑白纹理。
   如果您需要更多的纹理的话,
   您应该增加texture数组的大小至您决定采用的纹理个数。
   }

   zoom             : GLfloat = -15.0;  // 星星离观察者的距离
   tilt             : GLfloat = 90.0;   // 星星的倾角
   spin             : GLfloat;          // 闪烁星星的自转
   loop             : GLuint;           // 全局l Loop 变量

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:NeHe的opengl教程delphi版(8)----简单的透明   下一篇:数据录入时自动复制原记录

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号