; // 调用纹理载入子例程 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 问题的解决之道
|