Android的OpenGL学习笔记(1)
16lz
2021-01-23
Android的OpenGL学习笔记(1)
先写第一个程序,介绍OpenGL的某些知识和框架结构:
MainActivity,Vortex.java代码:
Code:- packagecom.droidnova.android.games.vortex;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- publicclassVortexextendsActivity{
- //privatestaticfinalStringLOG_TAG=Vortex.class.getSimpleName();
- privateVortexView_vortexView;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- _vortexView=newVortexView(this);
- setContentView(_vortexView);
- }
- }
- /*@Override
- protectedvoidonPause(){
- super.onPause();
- _vortexView.onPause();
- }
- @Override
- protectedvoidonResume(){
- super.onResume();
- _vortexView.onResume();
- }*/
我们继承了GLSurfaceView是因为它会帮助我们画3D图像。接下来看VortexRenderer类。一个Renderer包含画一帧所必需的所有东西。
VortexRendere.java
Code:- packagecom.droidnova.android.games.vortex;
- importjavax.microedition.khronos.egl.EGLConfig;
- importjavax.microedition.khronos.opengles.GL10;
- importandroid.opengl.GLSurfaceView;
- publicclassVortexRendererimplementsGLSurfaceView.Renderer{
- //privatestaticfinalStringLOG_TAG=VortexRenderer.class.getSimpleName();
- privatefloat_red=0.9f;
- privatefloat_green=0.2f;
- privatefloat_blue=0.2f;
- //当窗口创建的时候需要调用onSurfaceCreated,所以我们可以在里面对OpenGL做一些初始化的工作
- @Override
- publicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){
- //Donothingspecial.
- }
- //surface发生改变的时候调用,例如从竖屏切换到横屏的时候。当窗口的大小发生改变的时候,当然,不管窗口的大小是否已经改变。
- //它在程序开始时至少运行一次,所以我们在该方法中设置OpenGL场景的大小
- @Override
- publicvoidonSurfaceChanged(GL10gl,intw,inth){
- gl.glViewport(0,0,w,h);//设置OpenGL场景的大小,这里设置的和屏幕同样大小
- }
- //当任何时候调用一个画图方法的时候。即所有的绘图操作都在onDrawFrame方法中进行,在绘图之前,需要将屏幕清除成前面所指定的颜色,
- //清除深度缓存,并且重置场景,然后就可以进行绘图了!
- @Override
- publicvoidonDrawFrame(GL10gl){
- //definethecolorwewanttobedisplayedasthe"clippingwall"
- gl.glClearColor(_red,_green,_blue,1.0f);//为底色定义了颜色
- //clearthecolorbuffertoshowtheClearColorwecalledabove...
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT);//GL10,这里的10代表1.0版本。清空颜色缓存。目前Android中的版本只达到1.1
- }
- publicvoidsetColor(floatr,floatg,floatb){
- _red=r;
- _green=g;
- _blue=b;
- }
- }
VortexView.java代码:(属于自定义View)
Code:- packagecom.droidnova.android.games.vortex;
- importandroid.content.Context;
- importandroid.opengl.GLSurfaceView;
- importandroid.view.MotionEvent;
- publicclassVortexViewextendsGLSurfaceView{
- //privatestaticfinalStringLOG_TAG=VortexView.class.getSimpleName();
- privateVortexRenderer_renderer;
- publicVortexView(Contextcontext){
- super(context);
- _renderer=newVortexRenderer();
- setRenderer(_renderer);
- }
- publicbooleanonTouchEvent(finalMotionEventevent){
- queueEvent(newRunnable(){
- publicvoidrun(){
- _renderer.setColor(event.getX()/getWidth(),event.getY()/getHeight(),1.0f);
- }
- });
- returntrue;
- }
- }
- /*publicbooleanonTouchEvent(finalMotionEventevent){
- queueEvent(newRunnable(){
- publicvoidrun(){
- _renderer.setColor(event.getX()/getWidth(),
- event.getY()/getHeight(),1.0f);
- }});
- returntrue;
- }*/
恩,基本上就这些代码,不需要任何布局!更详细的OpenGL知识可以参考计算机图形学!和以往一样,必要的解释都在代码注释中,如有不懂,可以留言提出!如有错误,请留言指出,这些都是些个人学习总结!
更多相关文章
- cocos2dx 调用java层代码
- 安卓学习(初)第三章(3)(《第一行代码》)
- 性能优化之Java(Android)代码优化
- 通过eclipse查看Android源代码(Java)
- 【Android】注解框架(四)-- 一行代码注入微信支付
- android通过代码来开启和关闭移动网络
- [android][利用JNI技术在Android中调用、调试C++代码]