当前位置:首页 » 安卓系统 » android纹理

android纹理

发布时间: 2024-01-30 21:49:56

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

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

‘贰’ cocos2dx android切换后台为什么要重建纹理

android系统下,切入后台,则纹理全部失效,从后台切到前台,cocos2d-x会重新加载纹理。这样有两个问题:

1、如果纹理较多的话,加载纹理会卡很长时间,就像死机一样。 变通解决方法是修改引擎代码,增加一个进度条提示。

2、文字描边等用到RenderTexture的地方会出现异常纹理,文字会花掉。 暂时不知道原因,无解。


这里提供一个解决方案,解决掉纹理失效的问题,初步测试没有发现大的问题,但是具体还要看实际运行情况,毕竟android机器太多了。

1、Cocos2dXGLSurfaceView.java代码修改

[cpp]view plain
  1. @Override
  2. publicvoidonPause(){
  3. this.queueEvent(newRunnable(){
  4. @Override
  5. publicvoidrun(){
  6. Cocos2dxGLSurfaceView.this.mCocos2dxRenderer.handleOnPause();
  7. }
  8. });
  9. //super.onPause();
  10. }

2、main.cpp中修改

[cpp]view plain
  1. voidJava_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*env,jobjectthiz,jintw,jinth)
  2. {
  3. InitCrashReport();
  4. if(!CCDirector::sharedDirector()->getOpenGLView())
  5. {
  6. CCEGLView*view=CCEGLView::sharedOpenGLView();
  7. view->setFrameSize(w,h);
  8. AppDelegate*pAppDelegate=newAppDelegate();
  9. CCApplication::sharedApplication()->run();
  10. }
  11. //else
  12. //{
  13. //ccDrawInit();
  14. //ccGLInvalidateStateCache();
  15. //CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
  16. //CCTextureCache::reloadAllTextures();
  17. //CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND,NULL);
  18. //CCDirector::sharedDirector()->setGLDefaultValues();
  19. //}
  20. }

‘叁’ android 中 glCompressedTexImage2D(GL_PALETTE8_RGBA8_OES)生成的压缩纹理在显存中是压缩的吗

是压缩的。由于减少了带宽占用,对性能是有好处的。不过画质是有损的。 你用的这个参数会出错吧

‘肆’ Android音视频之使用OpenGL ES绘制图片

关于 OpenGL ES 的介绍,请先看上篇: Android 音视频之使用 OpenGL ES 绘制三角形 。

使用 OpenGL ES 绘制简单的几何形状还不够,OpenGL 更多地是用来显示而纹理图像,比如本地图片、相机画面。简单说,纹理(texture)就是一个图像或照片,它们可以被加载进 OpenGL 中。

OpenGL 中的纹理可以扰判用来表示图像、照片等,每个二维的纹理都由许多小缓缺改的纹理元素组成,它们是小块的数据,类似片段和像素。要使用纹理,最常用的方式是直接从一个图像文件加载数据。

纹理不会被直接绘制,它们要被绑定到纹理单元,然后把这些纹理单元传递给着色器。纹理映射的基本思想就是:首先为图元中的每个顶点指定恰当的纹理坐标,然后通过纹理坐标在纹理图中可以确定选中的纹理区域,最后将选中纹理区域中的内容根据纹理坐标映射到指定的图元上。

纹理的坐标系和顶点着色器的坐标系是不一样的。纹理坐标用浮点数来表示,范围 [0, 1],左上角坐标为 (0.0, 0.0),右上角坐标为 (1.0, 0.0)。注意:要将纹理坐标对应到正确的顶点上,才能使纹理正确扮银地显示。

定义顶点和纹理坐标,两者的顺序必须一一对应。

定义着色器。

加载图片到 OpenGL 中。

计算变换矩阵,采用 CenterInside 或者 CenterCrop 的方式显示。

显示图片。

源码在 GitHub 上。

参考资料:

热点内容
算法对算 发布:2024-11-28 15:41:38 浏览:3
称重系统界面如何找配置项 发布:2024-11-28 15:28:29 浏览:569
vue能被反编译嘛 发布:2024-11-28 15:23:59 浏览:79
gl和中配哪个配置好 发布:2024-11-28 15:20:01 浏览:235
linuxandroid嵌入式 发布:2024-11-28 15:18:58 浏览:200
服务密码是啥有什么用 发布:2024-11-28 15:08:48 浏览:164
编程王国 发布:2024-11-28 15:05:12 浏览:977
ftp服务器对什么硬件要求高 发布:2024-11-28 14:45:10 浏览:650
sql服务管理器下载 发布:2024-11-28 14:45:02 浏览:772
windows第三方ftp搭建 发布:2024-11-28 14:43:53 浏览:199