学习opengl-es之初,因为公司需求“展示3D模型和一系列的定制操作”功能,关于模型这方面知识不会,一开始思考是不是直接用游戏引擎就完事儿了,答案是当然可以的,但是他么的么有接触过游戏引擎啊而其文档又少,马麦碧蓝瘦香菇。还是自己研究研究OpenGL-es吧。
判断支持OpenGl版本
我们用的是2.0版本,所以判断手机是否支持2.0版本
private boolean supportsEs2() {
ActivityManager activityManager =
(ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfo configurationInfo = activityManager
.getDeviceConfigurationInfo();
final boolean supportsEs2 =
configurationInfo.reqGlEsVersion >= 0x20000
|| (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1
&& (Build.FINGERPRINT.startsWith("generic")
|| Build.FINGERPRINT.startsWith("unknown")
|| Build.MODEL.contains("google_sdk")
|| Build.MODEL.contains("Emulator")
|| Build.MODEL.contains("Android SDK built for x86")));
return supportsEs2;
}
/**
* 为OpenGl2.0配置渲染表面
*/
private void initData() {
if (supportsEs2()) {
MyRender myGlRender = new MyRender();
//设置opengl版本
surfaceView.setEGLContextClientVersion(2);
surfaceView.setRenderer(myGlRender);
//RenderMode 有两种,RENDERMODE_WHEN_DIRTY 和 RENDERMODE_CONTINUOUSLY,前者是懒惰渲染,需要手动调用
// glSurfaceView.requestRender() 才会进行更新,而后者则是不停渲染。
surfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
} else {
Log.d("mmm", "不支持2.0版本");
}
}
想要使用OpenGL绘图其实步骤就两步实例化GLSurfaceView,编写渲染器GLSurfaceView.Render
- 实例化渲染器
public class MainActivity extends AppCompatActivity {
GLSurfaceView surfaceView ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
surfaceView =new GLSurfaceView(this);
setContentView(surfaceView);
initData();
}
}
- 实现渲染器
/**
* 渲染器
*/
public class MyRender implements GLSurfaceView.Renderer {
@Override
public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {
/*填充颜色*/
GLES20.glClearColor(0.0f,55.0f,110,0.0f);
}
@Override
public void onSurfaceChanged(GL10 gl10, int i, int i1) {
/*窗口大小*/
GLES20.glViewport(0,0,i,i1);
}
@Override
public void onDrawFrame(GL10 gl10) {
/*清空屏幕*/
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
}
}
3、填充颜色的效果
结语:万事开头难,咱们头已经开好了,等待着我们的是形形色色的牛逼的图形了,努力吧少年