OpenGJ的一个简单事例,实现点击变颜色

来源:互联网 发布:wind数据库如何使用 编辑:程序博客网 时间:2024/04/25 21:37
 

1 在MainActivity中实现一下代码:

public class MainActivity extends Activity {
   
 OpenGLView mOpenGLView;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //设置全屏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //去标题栏
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
          WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.main);
       
      
        mOpenGLView = new OpenGLView(this);
        setContentView(mOpenGLView);

        //检测网络是否连接
       Log.i("other",utils.detect(this)+"");
      
    }
}

  新建一个OpenGLRenderer 继承 Renderer

public class OpenGLRenderer implements Renderer {

 private float cr,cg,cb;

//自定义一个方法

 public void setColor(float r,float g,float b){
        cr = r;
        cg = g;
        cb = b;
 }
 
 @Override
 public void onSurfaceCreated(GL10 gl, EGLConfig config) {
   // 设置输出屏幕大小
  //启用smooth shading(阴影平滑)。阴影平滑通过多边形精细的混合色彩,并对外部光进行平滑,在以后的课程中会看到他的效果。
     gl.glShadeModel(GL10.GL_SMOOTH);
     //设置清除屏幕时所用的颜色
       
        gl.glClearDepthf(1.0f);
        gl.glEnable(GL10.GL_DEPTH_TEST);
        gl.glDepthFunc(GL10.GL_LEQUAL);
        //上面三行是关于depth buffer(深度缓存)的
        //OpenGL我们希望进行最好的透视修正
        gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);

 }
 
 @Override
 public void onSurfaceChanged(GL10 gl, int width, int height) {
   // 设置输出屏幕大小
        gl.glViewport(0, 0, width, height);


 }
 
 
 @Override
 public void onDrawFrame(GL10 gl) {
  //清除屏幕和深度缓存
   gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
   //重置当前的模型观察矩阵。
      gl.glLoadIdentity();

      gl.glClearColor(cr, cg, cb, 0.0f);

 }


}
写一个类OpenGLView 继承GLSurfaceView

public class OpenGLView extends GLSurfaceView {
 OpenGLRenderer mRenderer;
 public OpenGLView(Context context) {
  super(context);
   mRenderer = new OpenGLRenderer();
        setRenderer(mRenderer);

  // TODO Auto-generated constructor stub
 }

 @Override
    public boolean onTouchEvent(final MotionEvent event) {
       queueEvent(new Runnable(){
 

           @Override
           public void run() {
              mRenderer.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f);
           }
         
       });
     
       return super.onTouchEvent(event);
}

}
这样就OK了

 

 

原创粉丝点击