(废弃)JOGL 第8课 雾

声明:    
   本来是想写点东西,记录学习的过程,并希望能帮助同我一样刚刚学习JOGL的朋友们
    可是由于没有明确目的,好心做了坏事,在这里先声明,本来是学习基本的JOGL,在
    学习过程中却把朋友们带入到了JOGL+GL4java中,基本的没学扎实,这是很错误的.


雾效果
哎,天天忙毕业设计又要学其他,还要上课,时间紧又一段时间想写
都没的时间,今天刚好可以缓下。

在上课中 我们画的图形本来是正方体但变形了,是由于窗口设置的
问题我在  reshape  if(height == 0) height = 1;后添加下面的代码
问题解决了
if(width>height)
{
   gl.glViewport(0,(height-width)/2, width, width);
}else
{
   gl.glViewport((width-height)/2, 0, height, height);
}

下面是雾的效果,在init  final IGL gl = glRenderer.getGL()下面
添加下面的代码,
    gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
      // 设置背景的颜色为雾气的颜色
float[] fogColor = new float[]{0.5f, 0.5f, 0.5f, 1.0f};
    gl.glFog(gl.GL_FOG_COLOR, fogColor);// 设置雾的颜色
    gl.glFog(gl.GL_FOG_MODE, gl.GL_EXP2);// 设置雾气的模式
    gl.glFog(gl.GL_FOG_DENSITY, 0.2f);// 设置雾的密度
    gl.glFog(gl.GL_FOG_START, -10.0f);// 雾气的开始位置
    gl.glFog(gl.GL_FOG_END, -10.5f);// 雾气的结束位置
    gl.glHint (gl.GL_FOG_HINT, gl.GL_DONT_CARE);
    gl.glEnable(gl.GL_FOG);// 使用雾气
   
运行后效果还可以

gl.glFog(gl.GL_FOG_MODE, gl.GL_EXP);建立雾的过滤模式。
它保存了值GL_EXP, GL_EXP2,GL_LINEAR。现在是使用他们的时候了。
我来解释它们(具体见红皮书,其实这是计算雾效混合因子的三种方式):
GL_EXP - 充满整个屏幕的基本渲染的雾。
它能在较老的PC上工作,因此并不是特别像雾。
GL_EXP2 - 比GL_EXP更进一步。
它也是充满整个屏幕,但它使屏幕看起来更有深度。
GL_LINEAR - 最好的渲染模式。物体淡入淡出的效果更自然。(这个效果我没有实现
视乎那么我没设置好,或哪里我弄错了)

gl.glFogf(gl.GL_FOG_COLOR, fogcolor);设置雾的颜色。
之前我们已将变量fogcolor设为(0.5f,0.5f,0.5f,1.0f),这是一个很棒的灰色。

gl.glFog(gl.GL_FOG_DENSITY,0.35f);这行设置雾的密度。
增加数字会让雾更密,减少它则雾更稀。

gl.glHint (gl.GL_FOG_HINT, gl.GL_DONT_CARE); 设置修正。我使用了GL_DONT_CARE因为我不关心它的值。


gl.glFog(gl.GL_FOG_START,1.0f);设定雾效距屏幕多近开始。
你可以根据你的需要随意改变这个值
gl.glFog(gl.GL_FOG_END, 5.0f);
告诉OpenGL程序雾效持续到距屏幕多远。


代码中在效果方面还不是很好,你可以自己研究,把效果做的更好

你可能感兴趣的:(设计模式,工作)