当前位置:首页 » 安卓系统 » androidopengles

androidopengles

发布时间: 2024-12-24 13:32:38

‘壹’ 如何查看android系统的openGL版本

android中查看手机系统的OpenGL版本,可以使用如下代码进行查询:

java">ActivityManageram=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
ConfigurationInfoinfo=am.getDeviceConfigurationInfo();
info.reqGlEsVersion=0x00010001//代表opengles1.1
info.reqGlEsVersion=0x00020000//代表opengles2.0

ActivityManager是Android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护。ActivityManagerProxy实现了接口IActivitManager,但并不真正实现这些方法,它只是一个代理类,真正动作的执行为Stub类ActivityManagerService,ActivityManagerService对象只有一个并存在于system_process进程中,ActivityManagerService继承于ActivityManagerNative存根类。

‘贰’ Android OpenGLES2.0(十八)——轻松搞定Blend颜色混合

Blend是OpenGL中的一个非常重要的部分,它可以让每个输出的源和目的颜色以多种方式组合在一起,以呈现出不同的效果,满足不同的需求。

在OpenGLES1.0中,Blend在OpenGLES固定的管线中,OpenGLES2.0相对1.0来说,更为灵活。在OpenGLES2.0中,与Blend相关的函数及功能主要有:

Blend的使用比较简单,但是如果不理解Blend的这些函数及参数的意义,使用了错误的参数,就难以获得我们所期望的混合结果了。
想要使用Blend, glEnable(GL_BLEND) 当然是必须的。与之对应的,不需要Blend的时候,我们需要调用 glDisable(GL_BLEND) 来关闭混合。
另外的四个方法,看名字差不多就能知道他们的意义了。
glBlendFunc 和 glBlendFuncSeparate 都是设置混合因子,反正就是这么个意思了。区别在于glBlendFunc是设置RGBA的混合因子,而glBlendFuncSeparate是分别设置RGB和Alpha的混合因子。设置混合因子是做什么的呢?继续看。
glBlendEquation 和 glBlendEquationSeparate 都是设置Blend的方程式,也就是设置混合的计算方式了,具体参数后面说。他们的区别在同 glBlendFunc 和 glBlendFuncSeparate 的区别一样。
颜色、因子、方程式,组合起来就是:最终颜色=(目标颜色 目标因子)@(源颜色 源因子),其中@表示一种运算符。
至于glBlendColor则是在glBlendFunc和glBlendFuncSeparate的设置中,因子可以设置和常量相关的,这个常量就是由glBlendColor设置进去的。

glBlendFuncSeparate设置混合因子,参数及它们表示的主要如下,而glBlendFunc的参数也是这些,表示的意义就是RGB和A合并为RGBA就是了。在下表中,s0表示源,d表示目的,c表示有glBlendColor设置进来的常量。

glBlendEquationSeparate的设置混合操作,参数及其意义如下表所示。通过glBlendEquationSeparate或者glBlendEquation设置的方程中,源和目的颜色分别为(Rs,Gs,Bs,As)
和(Rd,Gd,Bd,Ad)。最终混合的颜色结果为(Rr,Gr,Br,Ar)。源和目的的混合因子分别为(sR,sG,sB,sA)和(dR,dG,dB,dA)

。其中,所有的颜色分量的取值范围都为[ 0, 1 ]。 GL_MIN和GL_MAX是在OpenGLES3.0才有的
Mode RGB Components Alpha Component
GL_FUNC_ADD RrGrBr=sRRs+dRRd=sGGs+dGGd=sBBs+dBBd
Ar=sAAs+dAAd
GL_FUNC_SUBTRACT RrGrBr=sRRs−dRRd=sGGs−dGGd=sBBs−dBBd
Ar=sAAs−dAAd
GL_FUNC_REVERSE_SUBTRACT RrGrBr=dRRd−sRRs=dGGd−sGGs=dBBd−sBBs
Ar=dAAd−sAAs
GL_MIN RrGrBr=min(Rs,Rd)=min(Gs,Gd)=min(Bs,Bd)
Ar=min(As,Ad)
GL_MAX RrGrBr=max(Rs,Rd)=max(Gs,Gd)=max(Bs,Bd)
Ar=max(As,Ad)

目的纹理和源纹理使用的图片分别如下所示(作为源的图片为了表现混合效果,上中下三部分用了不一样的透明度,最下面部分不透明):

根据公式推敲下渲染的结果:

‘叁’ android中使用OpenGLES,有什么方法可以将texture反过来转化成Bitmap的方法没有

你可以先将GLES20环境里面的上下文设置好
获取好之后就可以将GLSurfaceview 的输入texture 转给GLES20.
然后通过GLES20.glBindFrameBuffer(GLES20.GL_FRAMEBUFFER,framebuffer)
然后调用GLES20.glFrameBufferTexture2D(xx,xxx,xxx,inputtexture ,xxx)
IntBuffer intbuffer = new IntBuffer(previewWidth,previewHeight);
intbuffer.order(ByteOrder.little.ENDLAN);
intbuffer.rewind();
GLES20.glReadPixels(0,0,previewWidth,previewHeight,GLES20.GL_RED,GLES20.GL_UNSLGLED_BYTE,Intbuffer);
bitmap = Bitmap.createBitmap(bitmapSource, iw, ih, Bitmap.Config.ARGB_8888);

最后将bitmap = Bitmap.create(intbuffer,previewWidht,previewHeight,Bitmap.Config.ARGB_8888);

‘肆’ Android OpenGLES2.0(十六)——3D模型贴图及光照处理(obj+mtl)

在Android OpenGLES2.0(十四)——Obj格式3D模型加载中实现了Obj格式的3D模型的加载,加载的是一个没有贴图,没有光照处理的帽子,为了呈现出立体效果,“手动”加了光照,拥有贴图的纹理及光照又该怎么加载呢?

本篇博客例子中加载的是一个卡通形象皮卡丘,资源是在网上随便找的一个。加载出来如图所示:

obj内容格式如下:

mtl文件内容格式如下:

关于Obj的内容格式,在上篇博客中已经做了总结,本篇博客中使用的obj,可以看到f后面的不再跟的是4个数字,而是 f 2/58/58 3/59/59 17/60/60 这种样子的三组数,每一组都表示为顶点坐标索引/贴图坐标点索引/顶点法线索引,三个顶点组成一个三角形。而头部的 mtllib pikachu.mtl 则指明使用的材质库。
而mtl格式文件中,主要数据类型为:

模型加载和之前的模型加载大同小异,不同的是,这次我们需要将模型的贴图坐标、顶点法线也一起加载,并传入到shader中。其他参数,有的自然也要取到。
模型加载以obj文件为入口,解析obj文件,从中获取到mtl文件相对路径,然后解析mtl文件。将材质库拆分为诸多的单一材质。obj对象的 加载,根据具使用材质不同来分解为多个3D模型。具体加载过程如下:

顶点着色器

片元着色器

完成了以上准备工作,就可以调用 readMultiObj 方法,将obj文件读成一个或多个带有各项参数的3D模型类,然后将每一个3D模型的参数传入shader中,进而进行渲染:

‘伍’ Android OpenGLES 瀹炴椂缇庨(纾ㄧ毊)镄勪紭鍖(浜)

鍦ㄥ墠涓绡囨枃绔 Android OpenGLES 瀹炴椂缇庨(纾ㄧ毊)镄勪紭鍖 锛屾垜浠宸茬粡浠嬬粛浜嗗叧浜庡疄镞剁编棰(纾ㄧ毊)镄勪竴浜涗紭鍖栫偣銆备絾鍦ㄥ疄闄呯殑浼桦寲娴嬭瘯涓鍙戠幇锛屽綋澶勭悊鍣ㄥ彂鐑涔嫔悗锛屽氨镞犳硶淇濊瘉棰勮埚抚鐜囦简锛屼富瑕佽缮鏄楂樻柉妯$硦澶勭悊镄勬暟鎹閲忔瘆杈冨ぇ瀵艰嚧銆傚洜姝わ纴鎴戜滑闇瑕佸绘垒鏂扮殑纾ㄧ毊鏂规硶銆
鐩鍓嶅竞闱涓婂叧浜庣(镄鏂规硶链夊ソ澶氱嶏纴浣跨敤PS纾ㄧ毊缁忓父鐢ㄥ埌镄勬柟娉曞寘𨰾楂桦弽宸淇濈暀銆侀珮浣庨戙佷腑镐х伆浠ュ强鍙岀嚎镐х瓑銆傚叾涓涓镐х伆鍜屽弻绾挎х殑鏁堢巼涓鑸锛屽洜姝わ纴鎴戜滑浠庨珮鍙嶅樊淇濈暀銆侀珮浣庨戣繖涓ょ嶆柟娉曚腑阃夋嫨銆傝繖閲岄夋嫨浣跨敤楂桦弽宸淇濈暀娉曞仛纾ㄧ毊澶勭悊锛孭S涓镄勯珮鍙嶅樊淇濈暀娉曡繘琛岀(镄锛岄殢镓嬩竴鎼滀究鑳芥垒鍒板緢澶氭枃绔狅纴姣斿傦细
https://jingyan..com/article/455a99504d568fa1662778d6.html

鎺ヤ笅𨱒ワ纴鎴戜滑灏濊瘯镌瀹炵幇鏂囩珷涓璁插埌镄勮繃绋嬨

鍏充簬楂樻柉妯$硦镄勪紭鍖栵纴鍙浠ュ弬钥冩湰浜虹殑鏂囩珷锛
OpenGLES婊ら暅寮鍙戞眹镐 钬斺 楂樻柉妯$硦瀹炵幇浠ュ强浼桦寲

瀵逛簬浜哄儚杩涜岄珮鏂妯$硦锛屾垜浠璁捐′竴涓11x11镄勯珮鏂绠楀瓙瀵瑰浘镀忚繘琛岄珮鏂妯$硦锛宻hader濡备笅锛
vertex shader :

fragment shader:

缁忚繃浠ヤ笂镄剆hader杩涜岄珮鏂妯$硦澶勭悊涔嫔悗锛屾垜浠寰楀埌杩欐牱涓寮犻珮鏂妯$硦锲惧儚锛

鍦≒S镄勯珮鍙嶅樊淇濈暀纾ㄧ毊鏂规硶涓锛岄珮鍙嶅樊淇濈暀纾ㄧ毊娣峰悎閲囩敤镄勬槸寮哄厜妯″纺锛岃$畻鍏寮忎负锛歝olor = 2 * color1 * color2銆傚洜姝わ纴鎴戜滑璁捐″嚭杩欐牱涓涓楂橀氭护娉㈠櫒锛屽叾shader濡备笅锛
fragment shader:

缁忚繃楂橀氭护娉㈠櫒涔嫔悗锛屾垜浠寰楀埌杩欐牱涓涓绾圭悊锲惧儚锛

鍙浠ョ湅鍒帮纴缁忚繃涓夐氶亾寮哄厜娣峰悎澶勭悊钖庯纴䦅桦嵃銆佽竟娌跨瓑鍦版柟閮芥竻鏅拌捣𨱒ヤ简銆傚己鍏夌殑绋嫔害锛屼竴鑸鏄3镄勫嶆暟锛岃繖閲屽彇24鍊嶃

鍒拌繖涓姝ワ纴鍏跺疄鎴戜滑宸茬粡寰楀埌浜嗛渶瑕佽繃婊ら滆壊鍊硷纴浣嗗湪杩欎竴寮犲浘涓锛屼篃鎶婅竟娌跨殑棰滆壊宸鍊煎寘钖杩涙潵浜嗐傛垜浠鎺ヤ笅𨱒ラ渶瑕佽繃婊ゆ帀杈规部镄勯滆壊宸鍊笺傝繖镙峰湪钖庣画镄勫勭悊涓锛屾垜浠鍙浠ヤ缭鐣栾竟娌跨殑缁呜妭涓嶈妯$硦鎺夈傚洜姝ゆ帴涓嬫潵锛屾垜浠闇瑕佸皢缁忚繃楂橀氭护娉㈠缑鍒扮殑绾圭悊锛屽啀锅氢竴娆¢珮鏂妯$硦銆备笉杩囱繖涓娆′笉鑳11 x11 杩欎箞澶х殑楂樻柉绠楀瓙锛屾垜浠阃夋嫨涓涓 5 x 5 澶у皬镄勯珮鏂绠楀瓙銆傞珮鏂妯$硦镄剆hader 濡备笅锛
vertex shader:

fragment shader:

灏嗛珮阃氭护娉㈠櫒寰楀埌镄勭汗鐞嗭纴缁忚繃楂樻柉妯$硦澶勭悊钖庯纴寰楀埌杩欐牱涓寮犵汗鐞嗭细

瀵规瘆楂橀氭护娉㈠櫒澶勭悊钖庣殑绾圭悊锛岃竟娌跨粏鑺傚彉寰楁ā绯娄简锛岃屼笖锛岄渶瑕佽繃婊ょ殑棰滆壊宸鍊间粛镞т缭鐣欑潃銆傚埌杩欎竴姝ワ纴鎴戜滑灏卞缑鍒颁简锅氱(镄澶勭悊镄勫墠缃绾圭悊銆傛帴涓嬫潵灏辨槸楂桦弽宸淇濈暀纾ㄧ毊镄勬渶钖庝篃鏄链閲嶈佺殑涓姝ャ

缁忚繃鍓嶉溃镄勫勭悊锛屾垜浠寰楀埌涓寮犺緭鍏ュ浘鐗囩殑楂樻柉妯$硦绾圭悊锛屼互鍙娄竴寮犻珮鍙嶅樊淇濈暀镄勯珮鏂妯$硦绾圭悊銆傛垜浠浣跨敤杩欎袱寮犵汗鐞嗭纴阃氲繃姣旇缉钃濊壊阃氶亾锛岃$畻鍑洪渶瑕佺(镄镄勫疄闄呭己搴﹀硷纴涓庡师锲捐繘琛屾贩钖埚勭悊锛岀劧钖庤緭鍑烘渶缁堢殑绾圭悊銆俿hader濡备笅镓绀猴细

缁忚繃涓婇溃镄勫勭悊涔嫔悗锛屾垜浠灏卞缑鍒扮(镄澶勭悊镄勭粨鏋滃备笅锛

鍙浠ョ湅鍒帮纴缁忚繃楂桦弽宸淇濈暀纾ㄧ毊钖庣殑缁撴灉锛岀(镄鏁堟灉杩树笉阌欙纴钥屼笖720P纾ㄧ毊澶勭悊镞讹纴鍦ㄩ珮阃氶獊榫625澶勭悊鍣ㄤ笂锛岀粡杩囬珮鍙嶅樊淇濈暀纾ㄧ毊涔嫔悗锛岄勮埚抚鐜囱兘澶熶缭鎸佸湪30FPS宸﹀彸銆傛垜浠鍙浠ョ湅鍒帮纴杈规部缁呜妭杩樻槸涓嶅熸槑鏄撅纴镓浠ワ纴鎴戜滑鍙浠ヤ娇鐢║SM阌愬寲澧炲己杈规部缁呜妭閮ㄥ垎銆傝繖绡囨枃绔犲氨涓嶈茶ВUSM阌愬寲镄勫疄鐜颁简銆

璇︾粏瀹炵幇杩囩▼锛屽彲浠ュ弬钥冩湰浜虹殑寮婧愮浉链洪”鐩锛
CainCamera
CainCamera镄凢ilterLibrary涓链夌粡杩囦紭鍖栧悗镄勫疄镞剁编棰(纾ㄧ毊)瀹炵幇銆

热点内容
人人网相册怎么加密 发布:2025-03-26 19:08:40 浏览:642
b站缓存罪恶王冠 发布:2025-03-26 19:04:09 浏览:436
微信php接口 发布:2025-03-26 19:04:07 浏览:553
python创建excel 发布:2025-03-26 18:57:12 浏览:982
横着上传 发布:2025-03-26 18:50:15 浏览:818
我的世界国际版电脑2b2t服务器 发布:2025-03-26 18:46:40 浏览:531
android中的service 发布:2025-03-26 18:40:06 浏览:538
python画函数图像 发布:2025-03-26 18:34:17 浏览:670
数据库收缩语句 发布:2025-03-26 18:31:52 浏览:667
同样配置下奕泽和chr哪个贵 发布:2025-03-26 18:30:00 浏览:614