package com.geolo.android;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.content.Context;
import android.opengl.GLSurfaceView.Renderer;
import android.opengl.GLU;
import com.geolo.android.polygon.MyCube;
import com.geolo.android.polygon.Polygon;
public class MyRenderer implements Renderer {
private Polygon mPolygon ;//�����
private Context mContext;
public MyRenderer(Context context){
this.mContext = context;
mPolygon = new MyCube(mContext);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// GL_PERSPECTIVE_CORRECTION_HINTʱ����ָ����ɫ����������IJ�ֵ����.
// GL_FASTESTΪʹ���ٶ�����ģʽ.
// GL_NICESTΪʹ��������õ�ģʽ.
// ����һ��GL_DONT_CAREΪ�������豸������.
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
// glClear��������OPENGL,��������ͨ��glClearʹ�ú죬�̣����Լ�AFAֵ�������ɫ�������ģ�
// ���Ҷ�����һ���ڣ�0��1��֮���ֵ����ʵ������յ�ǰ��������ɫ��
gl.glClearColor(0, 0, 0, 1);
// http://wei19870601.blog.163.com/blog/static/135936648201221311314371/
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glClearDepthf(1.0f);
gl.glDepthFunc(GL10.GL_LEQUAL);
gl.glCullFace(GL10.GL_BACK);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
float radio = (float)width/height;
// glViewport(GLint x,GLint y,GLsizei width,GLsizei height)Ϊ�亯��ԭ�͡�
// ����X��Y��������������Ϊ��λ��ָ�����ӿڵ����½�λ�á�
// ����width��height����������ʾ����ӿھ��εĿ�Ⱥ߶ȣ����ݴ��ڵ�ʵʱ�仯�ػ洰�ڡ�
gl.glViewport(0, 0, width, height);
/**
* glMatrixMode - ָ����һ�������ǵ�ǰ����
*
* mode ָ����һ�������ջ����һ�����������Ŀ��,��ѡֵ:
* GL_MODELVIEW��GL_PROJECTION��GL_TEXTURE. ���� ˵�� ���� glMatrixMode���õ�ǰ����ģʽ:
* ����GL_MODELVIEW,��ģ���Ӿ������ջӦ�����ľ������. ���� GL_PROJECTION,��ͶӰ����Ӧ�����ľ������.
* ����GL_TEXTURE,����������ջӦ�����ľ������. ���� ��glLoadIdentity()һͬʹ��
* ����glLoadIdentity():�ú����Ĺ��������õ�ǰָ���ľ���Ϊ��λ����
* ������glLoadIdentity()֮������Ϊ������������ͼ
* ��glMatrixMode(GL_MODELVIEW)���õ�ǰ����Ϊģ����ͼ����ģ����ͼ�������й��������Ϣ��
*/
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(-radio, radio, -1, 1, 1, 100);
mPolygon.initData(gl);
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0);
mPolygon.draw(gl);
}
}