转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
NeHe的opengl教程delphi版(8)----简单的透明         ★★★★

NeHe的opengl教程delphi版(8)----简单的透明

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1473 更新时间:2009/4/23 18:37:36
;         // 调用纹理载入子例程
      exit;                             // 如果未能载入,退出

   glEnable(GL_TEXTURE_2D);             // 启用纹理映射
   glShadeModel(GL_SMOOTH);             // 启用阴影平滑
   glClearColor(0.0, 0.0, 0.0, 0.0);    // 黑色背景
   glClearDepth(1.0);                   // 设置深度缓存
   glEnable(GL_DEPTH_TEST);             // 启用深度测试
   glDepthFunc(GL_LESS);                // 所作深度测试的类型
   glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); //高度优化的透视投影计算
   glLightfv(GL_LIGHT1, GL_AMBIENT, @LightAmbient[0]); // 设置环境光
   glLightfv(GL_LIGHT1, GL_DIFFUSE, @LightDiffuse[0]); // 设置漫射光
   glLightfv(GL_LIGHT1, GL_POSITION, @LightPosition); // 光源位置
   glEnable(GL_LIGHT1);                 // 启用一号光源

   glColor4f(1.0, 1.0, 1.0, 0.5);       // 全亮度, 50% Alpha 混合( 新增 )
   glBlendFunc(GL_SRC_ALPHA, GL_ONE); // 基于源象素alpha通道值的半透明混合函数 ( 新增 )

End;

 {在接近第七课结尾处的地方找到下面的代码段。
                  If keys[VK_LEFT] Then    //Left方向键按下了么?
                  yspeed := yspeed - 0.01; //若是, 减少yspeed
                接着上面的代码,我们增加如下的代码。
                这几行监视B键是否按下。
                如果是的话,计算机检查混合选项是否已经打开。
                然后将其置为相反的状态。
                }
               If (keys[ord(''''B'''')] And Not bp) Then //B 健按下且bp为 FALSE么?
                  Begin
                     bp := TRUE;        // 若是, bp 设为 TRUE
                     blend := Not blend; // 切换混合选项的 TRUE / FALSE
                     If (blend) Then    // 混合打开了么?
                        Begin
                           glEnable(GL_BLEND); // 打开混合
                           glDisable(GL_DEPTH_TEST); // 关闭深度测试
                        End
                     Else               // 否则
                        Begin
                           glDisable(GL_BLEND); // 关闭混合
                           glEnable(GL_DEPTH_TEST); // 打开深度测试
                        End;
                  End;
               If (Not keys[ord(''''B'''')]) Then //  B 键松开了么?
                  Begin
                     bp := FALSE;       // 若是, bp设为 FALSE
                  End;
               {
               但是怎样才能在使用纹理贴图的时候指定混合时的颜色呢?很简单,
               在调整贴图模式时,文理贴图的每个象素点的颜色都是由alpha通道参数
               与当前地象素颜色相乘所得到的。
               比如,绘制的颜色是 (0.5, 0.6, 0.4),
               我们会把颜色相乘得到(0.5, 0.6, 0.4, 0.2)
                (alpha参数在没有指定时,缺省为零)。
               就是如此!OpenGL实现Alpha混合的确很简单!
               }
               {
                原文注 (11/13/99)
                我(NeHe)混色代码进行了修改,以使显示的物体看起来更逼真。
                同时对源象素和目的象素使用alpha参数来混合,会导致物体的人造痕迹看起来很明显。
                会使得物体的背面沿着侧面的地方显得更暗。
                基本上物体会看起来很怪异。
                我所用的混色方法也许不是最好的,但的确能够工作。
                启用光源之后,物体看起来很逼真。
                感谢Tom提供的原始代码,他采用的混色方法是正确的,
                但物体看起来并不象所期望的那样吸引人:)
                代码所作的再次修改是因为在某些显卡上glDepthMask()函数存在寻址问题。
                这条命令在某些卡上启用或关闭深度缓冲测试时似乎不是很有效,
                所以我已经将启用或关闭深度缓冲测试的代码转成老式的glEnable和glDisable。

                纹理贴图的Alpha混合
                用于纹理贴图的alpha参数可以象颜色一样从问题贴图中读取。
                方法如下,您需要在载入所需的材质同时取得其的alpha参数。
                然后在调用glTexImage2D()时使用GL_RGBA的颜色格式。
               }

 

 

//运行一下看看效果

上一页  [1] [2] 


[系统软件]InstallShield Express for delphi制作安装程序定…  [常用软件]InstallShield Express制作Delphi数据库安装程序
[Delphi程序]为什么选择Delphi.Net ?  [Delphi程序]《关于VisiBroker For Delphi的使用》(4)
[Delphi程序]Delphi 程序员代码编写标准指南  [Delphi程序]转贴:Conversion to Delphi 6: Missing unit Pro…
[Delphi程序]Borland Delphi 9 的新特性  [Delphi程序]Delphi 键盘码表
[Delphi程序]Chuck Jazdzewski的离开意味着Delphi的终结吗?  [Delphi程序]Delphi Access violations 问题的解决之道
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台