8.混合和透视效果

         在这一课里,我们在纹理的基础上加上了混合,它看起具有透明的效果。
         具体的理论资料大家如果有兴趣可以看一下《交互式计算机图形学-基于OpenGL的自顶向下的设计方法》第四版的第381页-383页。上面叙述的很清楚。这里暂时将代码粘在这,以后有时间的话用到的地方我会简单的做些说明。
 
       为了和Nehe的教程保持一致,这里我采用的是Nehe教程中的纹理映射图像,glass.bmp(附件的源码中有),并且这里我对Nehe的教程进行了扩展,你可以看到光源和物体的不同位置关系的混合特效。
 

1  在Form构造函数中填入了以下代码

//启用阴影平滑
gl.ShadeModel(OpenGL.SMOOTH);
//黑色背景
gl.ClearColor(0f, 0f, 0f, 0.5f);
//设置深度缓存
gl.ClearDepth(1.0f);
//启用深度测试
gl.Enable(OpenGL.DEPTH_TEST);
//所做的深度测试
gl.DepthFunc(OpenGL.LEQUAL);
//告诉系统对测试进行修正
gl.Hint(OpenGL.PERSPECTIVE_CORRECTION_HINT, OpenGL.NICEST);
// 全亮度, 50% Alpha 混合
gl.Color(1f,1f,1f,0.5f);
// 基于源象素alpha通道值的半透明混合函数
gl.BlendFunc(OpenGL.SRC_ALPHA,OpenGL.ONE);
 

2  加入以下成员变量

//混合变量
bool blend= false;
 

3  加入Key的响应函数,使B键成为混合的开关。

case Keys.B:
if (blend) //现在混合状态
{
//关闭混合
gl.Disable(OpenGL.BLEND);
gl.Enable(OpenGL.DEPTH_TEST);

}
else
{
//开启混合
gl.Enable(OpenGL.BLEND);
gl.Disable(OpenGL.DEPTH_TEST);

}
blend = !blend;
break;
 

4 最终的执行效果

     1>运行Load完毕

            2>按住K键调整光源深度,可以看到物体亮度增加

 
 

              3>按下B键,开启混合效果,看到这时的效果不明显。

 

       4>按住L键向右侧调整光源,这时能看到如下透视效果

                    5>按下J键向左调整光源可以看到如下效果

                                   6>按住I键向屏幕内侧调整光源这时可以看到如下效果

 
 

                7 >  按住D键向右调整物体可以看到如下效果

 
源代码         

你可能感兴趣的:(C#,职场,OpenGL,休闲,SharpGL)