OpenGL是用于编写在GPU上渲染的2D和3D图形的API。 这将释放CPU上宝贵的计算资源,以用于更复杂的物理或更多实体或与图形无关的任何事物。
有一些概念需要理解,但是当我们在学习过程中碰到它们时,我将对其进行介绍。
如果您关注与在android设备上显示图形有关的文章,您已经知道为了显示图形元素,我们需要一个曲面和一个渲染器。 我们使用了基本的SurfaceView ,从中获得了Canvas,并通过在游戏循环中调用受支持的draw方法将所有内容绘制到画布上。
使用OpenGL没有太大区别。 Android随附SurfaceView接口的专用实现,用于显示OpenGL渲染的图像。
让我们以通常的方式创建android项目。
我称该活动为Run 。 检查向导生成了什么,它应该如下所示:
public class Run extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
没什么特别的。
创建OpenGL渲染器
让我们构建渲染器。 创建一个实现android.opengl.GLSurfaceView.Renderer接口的GlRenderer类。
它看起来像这样:
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.opengl.GLSurfaceView.Renderer;
public class GlRenderer implements Renderer {
@Override
public void onDrawFrame(GL10 gl) {
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}
}
我们需要实现以上三种方法。 目前他们是空的,什么也不做。
方法
onSurfaceCreated(GL10 gl,EGLConfig config)创建或重新创建 。 重要的是要牢记重新创建的位,因为这意味着每次设备进入睡眠状态(例如唤醒)时,都会重新创建表面。 因为保存资源的上下文也被破坏了,所以这是我们加载资源(纹理的图像等)的地方。
只要表面尺寸发生变化,就会调用onSurfaceChanged(GL10 gl,int width,int height) 。 这主要影响我们的视口。 视口只是一个矩形区域,通过它我们可以看到游戏世界。
渲染线程调用onDrawFrame(GL10 gl)绘制每个帧。 这是所有绘制的地方。 我们不需要显式调用它。 渲染线程是由android为我们创建的,它将调用它。
让我们切换到OpenGL渲染器。 签出新的“运行”活动。
package net.obviam.opengl;
import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
public class Run extends Activity {
/** The OpenGL view */
private GLSurfaceView glSurfaceView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// requesting to turn the title OFF
requestWindowFeature(Window.FEATURE_NO_TITLE);
// making it full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// Initiate the Open GL view and
// create an instance with this activity
glSurfaceView = new GLSurfaceView(this);
// set our renderer to be the main renderer with
// the current activity context
glSurfaceView.setRenderer(new GlRenderer());
setContentView(glSurfaceView);
}
/** Remember to resume the glSurface */
@Override
protected void onResume() {
super.onResume();
glSurfaceView.onResume();
}
/** Also pause the glSurface */
@Override
protected void onPause() {
super.onPause();
glSurfaceView.onPause();
}
}
在第12行中,我们声明了GLSurfaceView成员变量。 这是android提供的OpenGL视图。 当实例化它时(第27行),我们必须使其具有上下文意识。 也就是说,视图可以访问应用程序环境。
我们需要做的就是将渲染器添加到该视图中。 我们在第31行执行此操作。
第32行告诉活动使用我们的OpenGL视图。
onResume()和onPause()方法被覆盖,并在我们的视图中触发相应的方法。
您可以将应用程序作为Android应用程序运行,并且应该会看到黑屏。
这就对了。 我们已经从画布切换到OpenGL渲染器。
在此处下载源代码和Eclipse项目(obviam.opengl.p01.tgz)
参考: 带有Android教程的OpenGL ES- JCG合作伙伴Tamas Jano从“ Canvas The Grain ”博客中将其从Canvas切换为OpenGL 。
- Android游戏开发教程简介
- Android游戏开发–游戏创意
- Android游戏开发–创建项目
- Android游戏开发–基本游戏架构
- Android游戏开发–基本游戏循环
- Android游戏开发–使用Android显示图像
- Android游戏开发–在屏幕上移动图像
- Android游戏开发–游戏循环
- Android游戏开发–测量FPS
- Android游戏开发–雪碧动画
- Android游戏开发–粒子爆炸
- Android游戏开发–设计游戏实体–策略模式
- Android游戏开发–使用位图字体
- Android游戏开发–使用OpenGL ES显示图形元素(原语)
- Android游戏开发– OpenGL纹理映射
- Android游戏开发–设计游戏实体–状态模式
- Android游戏文章系列
翻译自: https://www.javacodegeeks.com/2011/09/android-game-development-switching-from.html