草庐IT

Android OpenGL 纹理 : creating and deleting them on the fly

我目前正在实现一个3D查看器,它基本上可以呈现用户在其SD卡上拥有的所有图像的子集。我想到的最匹配的产品是CoolIris:它只是在屏幕上显示一个由N个图block组成的滚动板,每个图block显示不同的图像,新图block进入屏幕并显示新图像。现在我的问题是:我的程序可以正常工作并很好地渲染四边形。当四边形离开屏幕时,它会被回收/释放。新的四边形在进入屏幕之前不断被添加到拼贴板上。因为可能有数百张图像,所以需要即时创建和删除纹理(这样我们就不会耗尽内存)。我遇到的问题是,在我删除纹理后,新创建的纹理似乎获得了当前正在使用的其他纹理的一些ID。我的渲染循环看起来像这样:voidrend

Android OpenGL - ES 纹理出血

我正在编写一个小应用程序,目前可以生成随机纹理贴图。我将这张map绘制成一组10x15的“四边形”,它们实际上都是三角形strip。我使用“map”获取一个整数,然后将其作为该正方形在textureAtlas中的纹理位置。所以例如0是左下角的“tile”。map集大小为128x128,分为32个像素block。然而,我似乎得到了一些奇怪的伪像,其中一个图block的纹理正在蔓延到下一个图block。我想知道它是否是图像本身,但据我所知,像素正是它们应该在的位置。然后我查看了我指定的纹理坐标,但它们看起来都很准确(0.0、0.25、0.5、0.75、1.0-将其分成我期望的4行和4列)。

android - GLUtils.texImage2D 和纹理中的 Alpha 问题

我使用GLUtils.texImage2D成功生成了我的纹理,但是当我使用生成的纹理时,我的alpha出现了问题:它们比想要的要暗。在检查了几件事后,我终于得出结论,问题出在GLUtils.texImage2D(GL10.GL_TEXTURE_2D,level,bmp,0);我创建了第二个函数,它使用gl.glTexImage2D(GL10.GL_TEXTURE_2D,level,GL10.GL_RGBA,width,height,0,GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE,pixels2);但是创建pixels2的处理成本很高,它是一个字节缓冲区,我必须

Android、GL、沉浸模式下的屏幕尺寸

我正在使用Nexus4KitKat4.4进行开发,并且尝试将IMMERSIVEMODE添加到我的游戏中。我需要屏幕高度才能正确设置glViewport。我以前用过@SuppressWarnings("deprecation")@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)publicstaticintgetScreenHeight(){if(Main.m_activity==null)return-1;Displaydisplay=Main.m_activity.getWindowManager().getDefaultDisplay();i

java - GLES2.0 : Use GL_TEXTURE_EXTERNAL_OES via glEGLImageTargetTexture2DOES

我想在Java中渲染一个图像缓冲区(在这种情况下,NDK不是一个选项)并通过GL_TEXTURE_EXTERNAL_OES将其传递给着色器.glTexImage2D不起作用,如spec中所述.但是函数glEGLImageTargetTexture2DOES只能通过GLES11Ext类使用,使用起来似乎有点不对。无论如何,我试过了,它给了我GL_INVALID_OPERATION,这应该发生在以下情况下:IftheGLisunabletospecifyatextureobjectusingthesuppliedeglImageOES(if,forexample,referstoamult

Android:OpenGL 存储纹理多长时间?

openGL将纹理存储多长时间?当您离开Activity时,纹理内存是否会被回收?例如,如果我有以下代码:mGL.glGenTextures(1,mTextures,0);mGL.glBindTexture(GL10.GL_TEXTURE_2D,mTextures[0]);//Aboundtextureis//anactivetexture//mGL.glTexImage2D(GL10.GL_TEXTURE_2D,0,GL10.GL_RGBA,bitmap.getWidth(),bitmap.getHeight(),0,GL10.GL_RGBA,GL10.GL_FLOAT,textur

java - 从相邻的 GL10 绘图图像中获取线条,解决方案?

我有一张背景图片,我正在使用opengl1.0es绘制。问题是当我将这个小图像绘制到大屏幕时,我得到了这个...模式中的线条/中断不应该存在。我试了很多东西,我想也许我的图集是错误的……怀疑它。我从(0,0,50,50)绘制它,即(x,y,width,height)。检查了很多,仍然得到相同的结果,这是应该的。用下面的for循环尝试了不同的东西......GL10gl=this.glGraphics.getGL();gl.glClear(GL10.GL_COLOR_BUFFER_BIT);guiCam.setViewportAndMatrices();gl.glEnable(GL10.

android/opengles alpha 纹理不是半透明的而是二进制透明的

我正在绘制一些带有alphachannel的纹理,但是当它们显示时,看起来alphachannel只是二进制的。所以一个像素要么是透明的要么是不透明的,尽管在纹理文件本身中像素是半透明的。混合设置如下:gl.glEnable(GL10.GL_BLEND);gl.glBlendFunc(GL10.GL_ONE,GL10.GL_ONE_MINUS_SRC_ALPHA);这个问题有解决办法吗?上面是应该的样子,下面是应该的样子: 最佳答案 试试这个:gl.glEnable(GL10.GL_BLEND);gl.glBlendFunc(GL1

android - 在 GLSurfaceView 中的 onResume() 之后重新加载 opengl 纹理

我有一个包含2个Activity的Android应用程序,A和B。应用程序以A开头,然后我点击屏幕切换到B。B正确显示,然后我按手机上的后退按钮切换回A.现在Activity运行正常,除了我看不到我的纹理。Activity的onResume方法调用GLSurfaceView的onResume方法,它调用我的渲染器onSurfaceCreated,然后调用onSurfaceChanged。在这个onDrawFrame之后调用每一帧,但它只清除具有给定颜色的屏幕。我知道GLSurfaceView的onPause破坏了它的内容,onResume应该重建它,但它对我不起作用:(我的代码:渲染器

java - OpenGL "Invalid operation error"android 手机上的 glDrawElements 函数后

我无法在我的手机上运行我的应用程序,我找到了错误,但缺乏编程知识和英语来修复它。该应用程序在模拟器上运行完美,在opengl中没有任何代码错误。然而在电话上一切运行良好,没有任何错误,但没有显示我想要绘制的opengl元素。我在我的代码中几乎所有地方都添加了glGetError,并发现在glDrawElements之后生成错误1282,即GL_INVALID_OPERATION。GL_INVALID_OPERATION如果非零缓冲区对象名称绑定(bind)到已启用的数组或元素数组和缓冲区对象的数据存储当前已映射。GL_INVALID_OPERATION如果glDrawElements在