导航:首页 > 操作系统 > androidopengl渲染

androidopengl渲染

发布时间:2022-06-29 19:20:18

Ⅰ 在android上,Unity3d底层是调用opengl es库吗

OpenGLES是Unity在现在的Android、ios等类似设备上用来渲染的底层库,是OpenGL的一个子集。OpenGLES在渲染能力、功耗设计中都考虑了移动设备的特殊性,所以现在的移动设备都是基于OpenGLES1.1或者2.0来渲染。在Windows(MAC、Linux)上,Unity会根据自己跑的来决定用DX还是OpenGL,因为是你来做,也会想着尽量能把最好的硬件都利用上,对吧?!所以,OpenGLES跟Unity的关系也就很明了,Unity会根据不同的运行环境,选择不同的渲染库,OpenGLES是其中的一个库,而已。

Ⅱ android opengl 怎么渲染文字

纹理渲染文本是比什么雪碧文本简单演示使它看起来像,基本思想是使用帆布类来呈现一个位图,然后通过一个OpenGL纹理的位图:

java">//Createanempty,mutablebitmap
Bitmapbitmap=Bitmap.createBitmap(256,256,Bitmap.Config.ARGB_4444);
//
Canvascanvas=newCanvas(bitmap);
bitmap.eraseColor(0);

//
//
Drawablebackground=context.getResources().getDrawable(R.drawable.background);
background.setBounds(0,0,256,256);
background.draw(canvas);//drawthebackgroundtoourbitmap

//Drawthetext
PainttextPaint=newPaint();
textPaint.setTextSize(32);
textPaint.setAntiAlias(true);
textPaint.setARGB(0xff,0x00,0x00,0x00);
//drawthetextcentered
canvas.drawText("HelloWorld",16,112,textPaint);

//Generateonetexturepointer...
gl.glGenTextures(1,textures,0);
//...andbindittoourarray
gl.glBindTexture(GL10.GL_TEXTURE_2D,textures[0]);

//CreateNearestFilteredTexture
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_LINEAR);

//,e.g.GL10.GL_CLAMP_TO_EDGE
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_S,GL10.GL_REPEAT);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_WRAP_T,GL10.GL_REPEAT);

//-
GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,bitmap,0);

//Cleanup
bitmap.recycle();

Ⅲ 谁有 Android 3D游戏开发(基础篇)——Opengl ES游戏引擎实现 的视频教程

你可以先去【绘学霸】网站找“游戏设计/游戏制作”板块的【免费】视频教程-【点击进入】完整入门到精通视频教程列表: www.huixueba.net/web/AppWebClient/AllCourseAndResourcePage?type=1&tagid=307&zdhhr-11y04r-245494221972772924

想要系统的学习可以考虑报一个网络直播课,推荐CGWANG的网络课。老师讲得细,上完还可以回看,还有同类型录播课可以免费学(赠送终身VIP)。

自制能力相对较弱的话,建议还是去好点的培训机构,实力和规模在国内排名前几的大机构,推荐行业龙头:王氏教育。
王氏教育全国直营校区面授课程试听【复制后面链接在浏览器也可打开】: www.huixueba.com.cn/school/3dmodel?type=2&zdhhr-11y04r-245494221972772924

在“游戏设计/游戏制作”领域的培训机构里,【王氏教育】是国内的老大,且没有加盟分校,都是总部直营的连锁校区。跟很多其它同类型大机构不一样的是:王氏教育每个校区都是实体面授,老师是手把手教,而且有专门的班主任从早盯到晚,爆肝式的学习模式,提升会很快,特别适合基础差的学生。

大家可以先把【绘学霸】APP下载到自己手机,方便碎片时间学习——绘学霸APP下载: www.huixueba.com.cn/Scripts/download.html

Ⅳ android中能否有两个opengl上下文

不能。
OpenGL本身就是一个非常庞大的状态机(State Machine) ,其状态通常被称为OpenGL上下文(Context)。它里面保存了一系列的变量用来描述OpenGL此刻需要如何运行,比如拍照时候要开启滤镜功能等等。
OpenGL使用C语言编写的,进而他的Api的封装也都是面向过程的,其函数本质上都是对OpenGL上下文状态机中的某个状态或者对象进行操作。
应用程序中可以创建多个不同的上下文,他们分别在各自的线程中使用。上下文之间共享纹理,缓冲区等资源,采用这中方案更为高效,因为它避免了反复切换上下文,或者大量修改渲染状态所造成的较大的开销。

Ⅳ Android开发使用OPENGL为什么会比原生更耗电

对,没错。OpenGLES支持Java作为宿主语言。不过如果是OpenGLES2.0的话,需要用到渲染管线时可能需要一些着色器语言作为支撑。而楼上所说的物理引擎都是需要花大价钱获得使用权的,但像Jbullet这种开源免费的3D引擎就是使用java实现的,网上可以免费下到jar包。本人也从事过android平台上的3D游戏开发,希望能帮到你。^_^

Ⅵ android skia与opengl es 都可以画2d图吗

一、基础知识: OpenGL ES目前只支持三角形,但任何多边形都可拆分成多个三角形,所以无所谓这个限制的存在。 1.OpenGL中的坐标点: 每一个坐标点由(X, Y, Z)组成。 定义一个三角形的顶点数组: [java] int one = 0x10000; //三角形三个顶点 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上顶点 -one,-one,0, //左下点 one,-one,0,}); //右下点 int one = 0x10000; //三角形三个顶点 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上顶点 -one,-one,0, //左下点 one,-one,0,}); //右下点定义一个正方形的顶点数组: [java] //正方形的4个顶点 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); //正方形的4个顶点 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); 2.OpenGL中的坐标系: 当调用gl.glLoadIdentity()函数之后,实际上是将当前点移动到了屏幕中心, X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。 OpenGL屏幕中心的坐标值是X轴和Y轴的0.0f点。 中心左边的坐标值是负值,右边是正值; 移向屏幕顶端是正值,移向屏幕底端是负值; 移入屏幕深处是负值,移出屏幕则是正值。 在绘制时,我们可以使用glTranslatef函数来移动画笔的位置,从而使图形显示在我们 想要的位置。 [java] gl.glTranslatef(-1.5f, 0.0f, -6.0f); gl.glTranslatef(-1.5f, 0.0f, -6.0f);此函数,就是将画笔沿X轴左移1.5f个单位,Y轴保持不变,Z轴向屏幕里面移动6.0f个单位。 将视图推入屏幕背后足够的距离以便可以看见全部的场景,这里需要注意的是屏幕内移动的单位 必须小于我们前面通过glFrustumf方法设置的最远距离,否则超出视角范围,将显示不出来。 3.OpenGL中的顶点数组: 在实际画图时,我们往往需要定位几个点,然后让OpenGL以此为基准来画图。在设置顶点位置前, 我们需要按照以下步骤来启用我们的顶点数组: ①开启顶点设置动能: [java] gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);②设置顶点数组: [java] view plainprint?gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer);glVertexPointer(int size, int type, int stride, Buffer pointer) size用于描述顶点的尺寸(本例使用XYZ,所以是3),type描述顶点的类型,固定的使用 GL_FIXED,stride描述步长,pointer指向顶点缓存,即我们创建的顶点数组。 ③绘制顶点: [java] gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); //绘制三角形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //绘制四边形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); //绘制三角形 gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); //绘制四边形glDrawArrays(int mode, int first, int count) mode指明绘制的模式,first和count分别是开始的位置和要绘制的顶点计数。 4、实例: 画一个三角形和正方形。 根据我们上一节的框架分析,目前,我们只需将精力集中在onDrawFrame方法里面的绘图操作部分了。 1. 界面编辑(reslayoutmain.xml): [java] android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> 2.代码编辑 (srcwyfzclMyActivity.java): [java] package wyf.zcl; import android.app.Activity; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; import android.os.Bundle; public class Activity01 extends Activity { Renderer render = new GLRender(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GLSurfaceView glView = new GLSurfaceView(this); glView.setRenderer(render); setContentView(glView); } } package wyf.zcl; import android.app.Activity; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; import android.os.Bundle; public class Activity01 extends Activity { Renderer render = new GLRender(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); GLSurfaceView glView = new GLSurfaceView(this); glView.setRenderer(render); setContentView(glView); } } (srcwyfzclGLRender.java): [java] package wyf.zcl; import java.nio.IntBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView.Renderer; public class GLRender implements Renderer { int one = 0x10000; //三角形三个顶点 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上顶点 -one,-one,0, //左下点 one,-one,0,}); //右下点 //正方形的4个顶点 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); @Override public void onDrawFrame(GL10 gl) { // 清除屏幕和深度缓存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT); // 重置当前的模型观察矩阵 gl.glLoadIdentity(); // 左移 1.5 单位,并移入屏幕 6.0 gl.glTranslatef(-1.5f, 0.0f, -6.0f); // 允许设置顶点 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 设置三角形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); //绘制三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // 重置当前的模型观察矩阵 gl.glLoadIdentity(); // 左移 1.5 单位,并移入屏幕 6.0 gl.glTranslatef(1.5f, 0.0f, -6.0f); //设置和绘制正方形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // 取消顶点设置 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { float ratio = (float) width / height; //设置OpenGL场景的大小 gl.glViewport(0, 0, width, height); //设置投影矩阵 gl.glMatrixMode(GL10.GL_PROJECTION); //重置投影矩阵 gl.glLoadIdentity(); // 设置视口的大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 选择模型观察矩阵 gl.glMatrixMode(GL10.GL_MODELVIEW); // 重置模型观察矩阵 gl.glLoadIdentity(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 启用阴影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 黑色背景 gl.glClearColor(0, 0, 0, 0); // 设置深度缓存 gl.glClearDepthf(1.0f); // 启用深度测试 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度测试的类型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告诉系统对透视进行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); } } package wyf.zcl; import java.nio.IntBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLSurfaceView.Renderer; public class GLRender implements Renderer { int one = 0x10000; //三角形三个顶点 private IntBuffer triggerBuffer = IntBuffer.wrap(new int[]{ 0,one,0, //上顶点 -one,-one,0, //左下点 one,-one,0,}); //右下点 //正方形的4个顶点 private IntBuffer quaterBuffer = IntBuffer.wrap(new int[]{ one,one,0, -one,one,0, one,-one,0, -one,-one,0}); @Override public void onDrawFrame(GL10 gl) { // 清除屏幕和深度缓存 gl.glClear(GL10.GL_COLOR_BUFFER_BIT GL10.GL_DEPTH_BUFFER_BIT); // 重置当前的模型观察矩阵 gl.glLoadIdentity(); // 左移 1.5 单位,并移入屏幕 6.0 gl.glTranslatef(-1.5f, 0.0f, -6.0f); // 允许设置顶点 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); // 设置三角形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, triggerBuffer); //绘制三角形 gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3); // 重置当前的模型观察矩阵 gl.glLoadIdentity(); // 左移 1.5 单位,并移入屏幕 6.0 gl.glTranslatef(1.5f, 0.0f, -6.0f); //设置和绘制正方形 gl.glVertexPointer(3, GL10.GL_FIXED, 0, quaterBuffer); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4); // 取消顶点设置 gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } @Override public void onSurfaceChanged(GL10 gl, int width, int height) { float ratio = (float) width / height; //设置OpenGL场景的大小 gl.glViewport(0, 0, width, height); //设置投影矩阵 gl.glMatrixMode(GL10.GL_PROJECTION); //重置投影矩阵 gl.glLoadIdentity(); // 设置视口的大小 gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); // 选择模型观察矩阵 gl.glMatrixMode(GL10.GL_MODELVIEW); // 重置模型观察矩阵 gl.glLoadIdentity(); } @Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { // 启用阴影平滑 gl.glShadeModel(GL10.GL_SMOOTH); // 黑色背景 gl.glClearColor(0, 0, 0, 0); // 设置深度缓存 gl.glClearDepthf(1.0f); // 启用深度测试 gl.glEnable(GL10.GL_DEPTH_TEST); // 所作深度测试的类型 gl.glDepthFunc(GL10.GL_LEQUAL); // 告诉系统对透视进行修正 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); } } 3.运行效果:

阅读全文

与androidopengl渲染相关的资料

热点内容
文件夹怎么做标题 浏览:31
腾讯云服务器如何防止被攻击 浏览:879
六棱柱的体积算法 浏览:933
淘宝什么云服务器好用 浏览:340
pythonoa项目 浏览:307
android杜比音效 浏览:341
杀手47为什么连接不了服务器 浏览:108
静态路径命令 浏览:533
一直编译不过怎么办 浏览:829
汽车串联并联算法 浏览:458
助眠解压的声音音频小哥哥 浏览:277
pythoncmd换行 浏览:376
linux取消行号 浏览:355
安卓原生系统官网是什么 浏览:444
底部主图源码 浏览:878
服务器崩了有什么提示 浏览:780
远程海康服务器用什么浏览器 浏览:232
解压报纸图片 浏览:956
python微信公众号开发平台 浏览:895
知识付费网站java源码 浏览:255