当前位置:首页 » 安卓系统 » androidopengl图片

androidopengl图片

发布时间: 2022-10-15 04:43:57

‘壹’ android openGL es图形旋转问题

在android中,要实现动画效果,要么通过循环调用canvas.draw系统方法,要么通过调用opengl es中的GLSurfaceView.Renderer实现方法onDrawFrame方法。 这个方法大体的原理是开起一个线程,在此线程内不断的调用onDrawFrame,实现效果。
其中gl.glRotatef(angle, x, y, z)的angle是旋过多少度。

‘贰’ android opengl制作地图 绘制图片的问题

是要自己开发地图引擎,还是需要用地图引擎类似的功能啊。。。如果是后者那么android的Google Map API 就是基于OpenGL ES 的,如果是想自己开发地图引擎,既然Google做了,所以说是可行的,至于感觉如何只有自己做过了才知道啊

‘叁’ 怎么把android OpenGL ES 绘制的图像背景变为透明

OpenGLES是一个让人崩溃的东西。在Andorid手机上做3D还就得用它。把我记的一些笔记分享在这里吧: Android OpenGL ES简介 20011-6-3 Android系统使用OpenGL的标准接口来支持3D图形功能,android 3D图形系统也分为java框架和本地代码两部分。 本地代码主要实现的OpenGL接口的库,在Java框架层,javax.microedition.khronos.opengles是java标准的OpenGL包, android.opengl包提供了OpenGL系统和Android GUI系统之间的联系。 Android的本地代码位于frameworks/base/opengl下, JNI代码位于frameworks/base/core/com_google_android_gles_jni_GLImpl.cpp和frameworks/base/core/com_google_android_gles_jni_EGLImpl.cpp, java类位于opengl/java/javax/microedition/khronos下 本地测试代码位于frameworks/base/opengl/tests。包括angeles、fillrate等14个测试代码,这些代码都可以通过终端进行本地调用测试(模拟器中使用adb shell)。 OpenGL ES 1.x 固定管线操作,支持glVertexPointer()等函数,不支持GLSL。头文件在ndk的GLES目录下,库文件是libGLESv1_CM.so。 OpenGL ES 2.x 可编程管线操作,不兼容1.x,不支持固定管线操作,例如glVertexPointer()等函数。支持GLSL(还必须用这个来编程)。头文件在ndk的GLES2目录下,库文件是libGLESv2.so。 OpenGL ES学习 2011-6-30 OpenGL定义了自己的数据类型。应该坚持使用这些OpenGL的数据类型,从而保证可移植性和效率。 OpenGL ES 目前不支持64位数据类型。 OpenGL ES 只支持三边形。 OpenGL ES 只支持gl开头的函数,glu库都不支持。 OpenGL ES 从 OpenGL中删除的功能: 1. glBegin/glEnd 2. glArrayElement 3. 显示列表 4. 求值器 5. 索引色模式 6. 自定义裁剪平面 7. glRect 8. 图像处理(这个一般显卡也没有,FireGL/Quadro显卡有) 9. 反馈缓冲 10. 选择缓冲 11. 累积缓冲 12. 边界标志 13. glPolygonMode 14. GL_QUADS,GL_QUAD_STRIP,GL_POLYGON 15. glPushAttrib,glPopAttrib,glPushClientAttrib,glPopClientAttrib 16. TEXTURE_1D、TEXTURE_3D、TEXTURE_RECT、TEXTURE_CUBE_MAP 17. GL_COMBINE 18. 自动纹理坐标生成 19. 纹理边界 20. GL_CLAMP、GL_CLAMP_TO_BORDER 21. 消失纹理代表 22. 纹理LOD限定 23. 纹理偏好限定 24. 纹理自动压缩解压缩 25. glDrawPixels,glPixelTransfer,glPixelZoom 26. glReadBuffer,glDrawBuffer,glCopyPixels OpenGL ES 2.0 2011-10-9 2.0和1.1不兼容。 - 2.0使用的头文件是ndk的include目录下的GLES2目录,有gl2.h,gl2ext.h,gl2platform.h,而1.1使用的是GLES目录。 - 2.0使用的库文件是ndk的lib目录下的libGLESv2.so,而1.1使用的是libGLESv1_CM.so。 - 2.0中取消了很多1.1函数,例如glMatrixModel和glLoadIdentity等。 OpenGL着色语言(GLSL――OpenGL Shading Language) - 使用2.0,必须学此语言。因为很多1.1的函数都被取消了。 san-angeles NDK OpenGL ES 1.1的例子程序 2012-3-8 San Angeles,查维基网络,是一个虚构的未来概念城市,位于南加州。常在电影中出现,来源自Los Angeles和San Diego. 该程序的演示效果是,观察一个宏伟的城市,地面是镜面有建筑倒影,城市中有飞船飞过。前后有5、6个观察点,而且镜头在每个观察点不停的移动。 这个例子,用NDK(C++)调用OpenGL ES 1.1来绘制了San Angeles这个城市。基本上全部使用了NDK,Java程序只有1个。 用vc2005演示一下,目的通过跟踪代码了解一些细节。方法是: - 将jni下所有的.h文件,以及demo.c,app-win32.c复制出来,放在一个专门的目录下,然后改造成用OpenGL的而不是ES的。(或者干脆删除大段的绘制代码,保证编译通过) 首先分析Java代码 - DemoActivity.java,这是唯一的Java文件,它主要需要下列4个jni的接口: - private static native void nativeInit(); // 初始化 - private static native void nativeResize(int w, int h); - private static native void nativeRender(); // 绘制1帧 - private static native void nativeDone(); 其次分析C++代码 app-android.c - 首先,调用了importGLInit(),动态导入OpenGL的库。 - 其次,调用了 appInit(),在内存中建立了平台无关的3D对象集合。建立方法是用一个数组,用类似画圆拔高的方式产生诸多三角形。 - 然后,在每个时钟周期中调用appRender(),细节是: - prepareFrame(width, height); // 准备OpenGL ES绘制框架。其实就是清空颜色和深度缓冲,重置投影和模型矩阵。 - camTrack(); // 算好在当前时钟周期,镜头的位置、朝向及焦距等。然后调用gluLookAt来实现。 - configureLightAndMaterial(); // 设置光源和材质 - drawModels(-1); // 先绘制倒影(其实就是将所有模型z轴倒过来画) - 第一个循环,是画精致的物体 - 第二个循环,是画运动的物体 - drawGroundPlane(); // 再绘制镜子一般的地面。在绘制前取消光照,打开混合,然后绘制。绘制后还原状态。 - drawModels(1); // 再绘制所有模型 - drawFadeQuad(); // 最后绘制淡出框,用融合的方式画一个遮住整个视口的2D框,融合系数和时间相关。

‘肆’ Android OpenGL ES(四)-为平面图添加滤镜

上一章加载图片的过程,在这里就不做赘述。

之前我们通过YUV数据格式的处理知道,只要保留Y的数据,就是灰度的图片。但是OpenGL中处理的是RGB格式的数据,我们要如何去取得灰度图呢?
我们可以通过公式,计算出新的RGB值,就是灰度的图片了。

我们的目标已经确定。下面我们需要将片段着色器上的每个像素的RGB值,通过上面的公式计算,装换成我们的灰度值。

根据上面的思路,我们需要去改片元着色器。 texture_fragment_shader.glsl

对比之前的,需要是有如下的修改点:

按照之前的想法,我们需要将我们的公式中的系数传递进入,就可以完成我们的操作了。基于之前的认识,我们知道传递我们的属性 uniform 给OpenGL的都是通过创建数组,绑定属性,这一套流程。

与上面的黑白色的处理相似,冷色调的处理就是单一增加蓝色通道的值,暖色调的处理可以增加红绿通道的值。

不管是冷色还是暖色。每个像素的颜色都和我们传入的色值相加,产生偏置之后的颜色。同时还要确保颜色的值合法。如果超过最大,或者小于最小,就用极限值表示。

还是之前的套路。

红黄通道增加的结果

蓝色通道增加的结果

图片模糊处理相对上面的色调处理稍微复杂一点,通常图片模糊处理是采集周边多个点,
然后利用这些点的色彩和这个点自身的色彩进行计算,得到一个新的色彩值作为目标色彩。
模糊处理有很多算法,类似高斯模糊、径向模糊等等。

最常用的还是高斯模糊。先看一下高斯模糊的原理。

使用正态分布作为权重分配模式,对周围像素取平均值的方式,就是高斯模糊。

在图形上,正态分布是一种钟形曲线,越接近中心,取值越大,越远离中心,取值越小。
计算平均值的时候,我们只需要将"中心点"作为原点,其他点按照其在正态曲线上的位置,分配权重,就可以得到一个加权平均值。

上面的正态分布是一维的,图像都是二维的,所以我们需要二维的正态分布。

二维高斯函数:

有了这个函数 ,就可以计算每个点的权重了。

为了计算权重矩阵,需要设定σ的值。假定σ=1.5,则 模糊半径为1 的权重矩阵,权重之和等于1,得到最终的权重矩阵。

对所有点重复这个过程,就得到了高斯模糊后的图像。如果原图是彩色图片,可以对RGB三个通道分别做高斯模糊。
如果一个点处于边界,周边没有足够的点,怎么办?
一个变通方法,就是把已有的点拷贝到另一面的对应位置,模拟出完整的矩阵。

上面着色器。我们是计算好了卷积核,直接在 shader 内写死应用的。

这一小节的内容耗时比较长。其实就是利用OpenGL的shader对图像进行简单的滤镜处理。
从这节我们学习到

下一章,会回到Android的内容。将OpenGl和Camera结合在一起。通过OpenGl来显示一个预览的画面。

‘伍’ android OpenGl ES 的问题 我给一个模型贴纹理 在我手机上运行的时候 图片只能选取256*256像素的

最简单直接的方法就是把你的图片丢到 drawble文件夹中(如果没有,建一个),不要放在drawable-hdpi,drawable-mdpi,或drawable-ldpi文件夹中即可

‘陆’ android 用png图像做opengl纹理时出现黑边怎么解决

诶呀,你这种用法大错特错了呀!texImage2D不能乱用呀,他是把资源导入GL用的,有点像玩游戏时的Loading.你应该在你的程序初始化时先glGentexture生成多个纹理句柄然后BindTexture,再把你需要的图片依次输入这时GL已经拥有了你全部的图片资源,然后在绘制的时候,用到哪张纹理就先Bind这个纹理,然后DrawArray,再Bind再DrawArray/DrawElement..哪有你这样每次draw都要texImage2D的?这不要慢死了推荐你去powervr的网站下载Opengles的pc端SDK,里面好多demo

‘柒’ 如何使用Android中的OpenGL ES媒体效果

准备
一款支持Android开发的IDE;
一款运行Android4.0之上Android手机,并且GPU支持OpenGL
ES2.0

对OpenGL的基本知识了解;
步骤
设置OpenGL
ES环境
为了显示OpenGL的图形,需要使用GLSurfaceView类,就像其他任何的View子类意义,可以将它添加到Activity或Fragment之上,通过在布局xml文件中定义或者在代码中创建实例,Activity中的onCreate方法如下:
因为媒体效果的框架仅仅支持OpenGL
ES2.0及以上的版本,所以在setEGLContextClientVersion
方法中传入2;
了确保GLSurfaceView仅仅在必要的时候进行渲染,在setRenderMode
方法中进行设置:
创建Renderer
创建类实现接口GLSurfaceView.Renderer,将这个类命名为EffectsRenderer,添加构造函数并覆写接口中的抽象方法,如下:
回到Activity中调用setRenderer方法,让GLSurfaceView使用我们创建的Renderer:
编写Manifest文件
在AndroidManifest.xml文件中添加如下语句:
创建一个OpenGL平面
创建一个2D平面,并且具有4个顶点。
默认的OpenGL系统的坐标系中的原点是在中心,因此4个角的坐标可以表示为:
创建一个float数组来代表这些顶点,在square上定位纹理,需要确定纹理的顶点坐标,创建另一个数组来表示纹理顶点的坐标:
这些坐标数组应该被转变为缓冲字符(byte
buffer)在OpenGL可以使用之前,所以需要定义:

‘捌’ 如何使用Android中的OpenGL ES媒体效果

Android的媒体效果框架允许开发者可以很容易的应用多种令人印象深刻的视觉效果到照片或视频之上。作为这个媒体效果的框架,它使用GPU来处
理图片处理的过程,它仅仅接收OpenGL的纹理(texture)作为输入。在本次教程中,你将会学习到如何使用OpenGL
ES2.0将图片资源转化为纹理,以及如何使用框架为图片应用不同的处理效果。
准备
为了开始本次的教程,你必须具备:
1.一款支持Android开发的IDE,如果你没有的话,可以在Android Developer website下载最新版本的Android studio。
2.一款运行Android4.0之上Android手机,并且GPU支持OpenGL ES2.0
3.对OpenGL的基本知识了解
设置OpenGL ES环境
创建GLSurfaceView
为了显示OpenGL的图形,你需要使用GLSurfaceView类,就像其他任何的View子类意义,你可以将它添加到你的Activity或Fragment之上,通过在布局xml文件中定义或者在代码中创建实例。
在本次的教程中,我们使用GLSurfaceView作为唯一的View在我们的Activity中,因此,为了简便,我们在代码中创建
GLSurfaceView的实例并将其传入setContentView中,这样它将会填充你的整个手机屏幕。Activity中的onCreate方
法如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

GLSurfaceView view = new GLSurfaceView(this);
setContentView(view);
}

因为媒体效果的框架仅仅支持OpenGL ES2.0及以上的版本,所以在setEGLContextClientVersion 方法中传入2;
view.setEGLContextClientVersion(2);

为了确保GLSurfaceView仅仅在必要的时候进行渲染,我们在setRenderMode 方法中进行设置:
view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);

创建Renderer
Renderer负责渲染GLSurfaceView中的内容。
创建类实现接口GLSurfaceView.Renderer,在这里我们打算将这个类命名为EffectsRenderer,添加构造函数并覆写接口中的抽象方法,如下:
public class EffectsRenderer implements GLSurfaceView.Renderer {

public EffectsRenderer(Context context){
super();
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
}

@Override
public void onDrawFrame(GL10 gl) {
}
}

回到Activity中调用setRenderer方法,让GLSurfaceView使用我们创建的Renderer:
view.setRenderer(new EffectsRenderer(this));

编写Manifest文件
如果你想要发布你的App到谷歌商店,在AndroidManifest.xml文件中添加如下语句:

这会确保你的app只能被安装在支持OpenGL ES2.0的设备之上。现在OpenGL环境准备完毕。
创建一个OpenGL平面
定义顶点
GLSurfaceView是不能直接显示一张照片的,照片首先应该被转化为纹理,应用在OpenGL square之上。在本次教程中,我将创建一个2D平面,并且具有4个顶点。为了简单,我将使用一个长方形,现在,创建一个新的类Square,用它来代表形状。
public class Square {

}

默认的OpenGL系统的坐标系中的原点是在中心,因此4个角的坐标可以表示为:
左下角: (-1, -1) 右下角:(1, -1) 右上角:(1, 1) 左上角:(-1, 1)
我们使用OpenGL绘制的所有的物体都应该是由三角形决定的,为了画一个方形,我们需要两个具有一条公共边的三角形,那意味着这些三角形的坐标应该是:
triangle 1: (-1, -1), (1, -1), 和 (-1, 1) triangle 2: (1, -1), (-1, 1), 和 (1, 1)
创建一个float数组来代表这些顶点:
private float vertices[] = {
-1f, -1f,
1f, -1f,
-1f, 1f,
1f, 1f,
};

为了在square上定位纹理,需要确定纹理的顶点坐标,创建另一个数组来表示纹理顶点的坐标:private float textureVertices[] = {
0f,1f,
1f,1f,
0f,0f,
1f,0f
};

‘玖’ android 用png图像做opengl纹理时出现黑边怎么解决

用libpng把png图片读出来就可以用读出的数据生成文理了.

‘拾’ android 使用opengl es2.0浏览全景图片

先上效果图

我是android opengl es的初学者,有很多东西还不懂,仍在学习;这里实现全景图浏览的一个思路是,先使用opengl绘制一个球体,这个球体中心位置在手机屏幕的中心,球体的半径为3。默认摄像机的位置在球体正前方半径为3的位置上,看着球体的中心,在收触摸屏幕的时候,不断调整摄像机的位置,但是保持距离球体中心的位置不变。

球体绘制成功后,将准备好的全景图,贴在球体的表面,就完成了(不需要对全景图进行特殊处理,我刚开始的思路是绘制一个正方体天空盒,然后对全景图进行处理,获得天空盒六个面的图像,然后将图像贴在六个面上,结果发现我不会。。。。)。

这里涉及到
opengl的绘制,可以看看 android opengl es2.0完全入门这篇文章

绘制球体,opengl es2.0只能绘制点,线和三角形,如果要绘制球体的话,需要将球体表面切分成成千上万个小矩形,矩形又可以切分成三角形来绘制,只要切分的够细,看上去就是球体。

绘制球体需要你掌握一点三维空间和三角函数的知识

热点内容
怎么上传歌曲到qq音乐 发布:2025-01-24 00:45:30 浏览:64
养猫用什么配置 发布:2025-01-24 00:37:58 浏览:811
pythongps 发布:2025-01-24 00:37:51 浏览:812
办公编程鼠标 发布:2025-01-24 00:37:07 浏览:385
wpa加密类型 发布:2025-01-24 00:35:58 浏览:959
如何用批处理实现ftp映射盘符 发布:2025-01-24 00:25:45 浏览:953
win7sql版本 发布:2025-01-24 00:22:16 浏览:498
安卓手机市场有什么 发布:2025-01-23 23:48:56 浏览:25
银城医考能缓存的视频 发布:2025-01-23 23:44:51 浏览:542
智能电视linux 发布:2025-01-23 23:42:54 浏览:843