package edu.union; import javax.microedition.khronos.opengles.GL10; import android.content.Context; import android.opengl.GLU; import android.view.KeyEvent; /** * Approximately corresponds to: http://www.zeuscmd.com/tutorials/opengles/22-Fog.php * @author bburns * */ public class GLTutorialTen extends GLTutorialBase { float[] lightPos = new float[] {0,0,3,1}; float lightAmbient[] = new float[] { 0.3f, 0.3f, 0.3f, 1.0f }; float lightDiffuse[] = new float[] { 1f, 1f, 1f, 1.0f }; float matAmbient[] = new float[] { 0.6f, 0.6f, 0.6f, 1.0f }; float matDiffuse[] = new float[] { 0.6f, 0.6f, 0.6f, 1.0f }; int tex; boolean fog; float fogColor[] = { 0.5f, 0.5f, 0.5f, 1.0f }; public GLTutorialTen(Context c) { super(c, 20); } protected void init(GL10 gl) { gl.glEnable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_LIGHT0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbient, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuse, 0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPos, 0); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glClearDepthf(1.0f); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glEnable(GL10.GL_CULL_FACE); gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); gl.glClearDepthf(1.0f); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuff); gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY); gl.glShadeModel(GL10.GL_SMOOTH); tex = loadTexture(gl, R.drawable.block); gl.glFogf(GL10.GL_FOG_MODE, GL10.GL_EXP);; gl.glFogfv(GL10.GL_FOG_COLOR, fogColor, 0); gl.glFogf(GL10.GL_FOG_DENSITY, 0.75f); gl.glHint(GL10.GL_FOG_HINT, GL10.GL_DONT_CARE); gl.glFogf(GL10.GL_FOG_START, 1.0f); gl.glFogf(GL10.GL_FOG_END, 5.0f); gl.glEnable(GL10.GL_FOG); } float xrot = 0.0f; float yrot = 0.0f; public void onDrawFrame(GL10 gl) { if (fog) { gl.glEnable(GL10.GL_FOG); } else { gl.glDisable(GL10.GL_FOG); } gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); setupCube(gl); gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0); gl.glPushMatrix(); gl.glRotatef(xrot, 1, 0, 0); gl.glRotatef(yrot, 0, 1, 0); gl.glBindTexture(GL10.GL_TEXTURE_2D, tex); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0); drawCube(gl); xrot+=1f; yrot+=0.5f; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT) { fog = true; } else if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) { fog = false; } return super.onKeyDown(keyCode, event); } }