草庐IT

Android opengl 问题(奇怪)

这很奇怪。我有一个基本应用程序(仪表板,...)和一个GLSurfaceview,我在其中绘制3D对象和纹理。一切都运行得很好,但是当我回去参加其他Activity时,嗯,截图胜于文字:这是之前的仪表盘这是opengl:这是我按下返回时的仪表板:如您所见,图片和文字都消失了。我在4.0+上运行,所以我想这是因为android使用opengl绘制元素,因为它在我的2.2设备上不这样做。您知道造成这种情况的原因吗?顺便说一句,当我不使用纹理时,它不会发生。 最佳答案 好的,我发现了我的问题所在。我通过在fragment的onPause(

android - Framebuffer FBO 渲染到纹理非常慢,在 Android 上使用 OpenGL ES 2.0,为什么?

我正在使用opengles2.0编写Android2d游戏。在我将Sprite绘制到后备缓冲区后,我将灯光绘制到FBO并尝试再次将其混合到后备缓冲区。当我将FBO绘制到帧缓冲区时,即使是透明的,没有任何颜色,在SamsungGalaxyw(它有一个adreno205作为gpu)上,帧率从60下降到30。我到处搜索并尝试了所有方法,即使我在场景中绘制了一个Sprite并将透明的FBO纹理混合到屏幕上,帧率也会下降。我在那部手机上尝试了其他带有灯光效果的游戏,它们运行良好,几乎所有游戏在那部手机上都很好,我相信他们也使用帧缓冲区。在GalaxySII(mali400gpu)上运行良好,我对

iphone - 适用于 Android 和 iPhone 的 OpenGL

在与一些同事的讨论中,我们想知道为Android或iPhone开发的OpenGL工作是否可以有效互换,因为两者都支持规范。或者说,在两个平台之间共享OpenGL的现实更多是一种怪癖、调整,并不像人们希望的那么容易。 最佳答案 OpenGL实现通常由两部分组成:1.平台特定部分。这具有通常与创建和显示表面相关的功能。2.OpenGLAPI。这部分对于OpenGL的具体实现在所有平台上都是一样的,以Android为例,OpenGLES1.0。这意味着您的大部分OpenGL代码应该易于移植。在C中,您可能有glLoadIdentity()

OpenGL ES 绘制一张图片

GLSL语法与内建函数GLSL的修饰符与数据类型GLSL中变量的修饰符const:修饰不可被外界改变的常量attribute:修饰经常更改的变量,只可以在顶点着色器中使用uniform:修饰不经常更改的变量,可用于顶点着色器和片段着色器varying:修饰在顶点着色器计算,然后传递到片元着色器中使用的变量GLSL的基本数据类型intfloatboolfloat是可以再加一个修饰符的,这个修饰符用来指定精度。highp:32bit,一般用于顶点坐标(vertexCoordinate)medium:16bit,一般用于纹理坐标(textureCoordinate)lowp:8bit,一般用于颜色表

android - 在 NativeActivity 中创建 OpenGL 着色器

我调整了nativeActivityNDK示例以合并hello-gl2示例中的OpenGL代码。我处理APP_CMD_INIT_WINDOW消息,然后尝试创建着色器。着色器创建失败,我尝试通过getShaderInfoiv获取信息,但同样失败。所以我的问题是-如何在纯原生Android应用程序中创建OpenGLES2.0着色器?附言我知道如果您使用JavaGLSurfaceView并且没有在正确的线程中创建它们,着色器创建可能会失败,但是查看nativeActivity示例,它似乎只有一个线程! 最佳答案 当然可以在原生Androi

java - 在 Android OpenGL ES 应用程序中加载纹理

我想知道是否有人可以建议在AndroidJava和OpenGLES应用程序中加载纹理的良好模式。我首先关心的是确定要分配多少个纹理名称,以及如何在渲染我的顶点之前有效地执行此操作。我的第二个问题是加载纹理,我必须根据我的游戏数据推断要加载的纹理。这意味着我将玩弄字符串,我知道这是我不应该在我的GL线程中做的事情。总的来说,我了解加载纹理时发生的情况,我只想从中获得最佳生命周期。还有其他我应该考虑的事情吗? 最佳答案 1)您应该根据需要分配尽可能多的纹理名称。一个用于您正在使用的每个纹理。加载纹理是一项非常繁重的操作,会拖延渲染管道。

OpenGL沿方向向量移动播放器

我尝试实现FP摄像机后面的想法以移动播放器对象,因此我有4个向量位置,正确,向上和前方,我使用以下方法更新向量并填充矩阵以发送到着色器:voidMesh::updateVectors(){glm::vec3f;f.x=cos(glm::radians(this->yaw))*cos(glm::radians(this->pitch));f.y=sin(glm::radians(this->pitch));f.z=sin(glm::radians(this->yaw))*cos(glm::radians(this->pitch));this->front=glm::normalize(f);th

安卓 OpenGL 截图

我搜索了很多有关在Android上截取我的OpenGL对象的屏幕截图的信息,并提出了this解决方案。它工作得很好,但在我的例子中,我在相机View之上有相机View和openglView(具有透明背景)。所以我想做的是获得透明背景而不是黑色的opengl屏幕截图。正如我所说,我已经尝试过上面的链接并且它有效但我被黑色背景卡住了。在这种特殊情况下,弄清楚如何摆脱黑色背景有点复杂。希望有人能尽快帮助我(我也认为解决方案很简单,我只是缺少一些简单的东西)。谢谢。 最佳答案 我使用了以下方法并且工作得很好。publicstaticBitm

OpenGL-绘制一个正方体

importpygamefrompygame.localsimport*fromOpenGL.GLimport*fromOpenGL.GLUimport*verticies=((1,-1,-1),(1,1,-1),(-1,1,-1),(-1,-1,-1),(1,-1,1),(1,1,1),(-1,-1,1),(-1,1,1))edges=((0,1),(0,3),(0,4),(2,1),(2,3),(2,7),(6,3),(6,4),(6,7),(5,1),(5,4),(5,7))defCube():glColor3f(0.0,1.0,1.0)glPolygonMode(GL_FRONT,GL

Android OpenGL ES - 如何绘制填充的凹多边形?

我正在使用OpenGLES创建适用于Android的2DOpenstreetmap渲染应用程序。不幸的是,我正在努力绘制由大约50个或更多点组成的凹多边形。为了完成我的多边形填充,我正在使用GL10.GL_TRIANGLE_FAN:gl.glVertexPointer(2,GL10.GL_FLOAT,0,vertBuff);//size=2because2Dgl.glDrawElements(GL10.GL_TRIANGLE_FAN,pointCount,GL10.GL_UNSIGNED_SHORT,indexBuff);只要我的多边形不太复杂,这种方法就可以正常工作,例如绘制这样的多