Articles of opengl es 2.0

使用AndEngine GLES2在游戏中使用Sprites的最佳实践

目前我对我的所有精灵都有静态引用,并在SimpleBaseGameActivity的OnCreateResource方法中加载和初始化它们,但现在我必须在spirtes上覆盖onAreaTouched监听器以及在初始化Sprite时我可以覆盖它的方式。 但我有一个静态方法为每个精灵创建Atlas和Texture Region。 我在我的场景类中使用这些精灵,我想在那里覆盖onAreaTouched。 我可以在我的场景中为特定的sprite注册TouchArea,这样就可以完成但是我想以某种方式覆盖OnAreaTouched,以便可以完成Code的可重用性。 这是我目前正在创建和加载精灵的方式。 defualtCageSprite = createAndLoadSimpleSprite(“bg.png”, this, 450, 444); 这是我的方法createAndLoadSimpleSprite。 public static Sprite createAndLoadSimpleSprite(String name, SimpleBaseGameActivity activity, int width, int height) { BitmapTextureAtlas atlasForBGSprite = new BitmapTextureAtlas( activity.getTextureManager(), width, height); TextureRegion backgroundSpriteTextureRegion = BitmapTextureAtlasTextureRegionFactory .createFromAsset(atlasForBGSprite, activity, name, 0, 0); Sprite sprite = new Sprite(0, 0, backgroundSpriteTextureRegion, activity.getVertexBufferObjectManager()); activity.getTextureManager().loadTexture(atlasForBGSprite); return sprite; } 现在,如何在不丢失代码可重用性的情况下覆盖某些精灵的onAreaTouched。

glCreateShader和glCreateProgram在android上失败

我在android上创建着色器程序时遇到了一个非常困难的问题。 当我调用glCreateShader或glCreateProgram时,每个都返回0。 我已经涵盖了有关故障排除的所有基础: 我检查确保我有一个ogl上下文(我这样做,我通过清除各种颜色的帧缓冲区测试了这个,这是有效的)。 我尝试了glGetError,但没有返回任何内容(GL_NO_ERROR) 我不是一个opengl或android专家,所以我不知道其他任何可能造成这种情况的事情。 我一直在nexus 7平板电脑上运行我的应用程序,我使用的是OpenGL ES 2.0,我的目标是最新版本的Android(版本17)。 最后,我还要显示我的代码: 这是我设置应用程序的样板代码: public class Platform implements ILinkable { class GameLoop extends GLSurfaceView implements GLSurfaceView.Renderer { class Graphics2D implements IGraphics2D { int width = 0; int height = 0; public void setWidth (int width ) { this.width = width; } public void setHeight(int height) { this.height […]

OpenGL ES 2.0与OpenGL 3 – 相似之处和不同之处

从我读过的看来,OpenGL ES 2.0似乎不像OpenGL 2.1,这是我之前的假设。 我很想知道的是OpenGL 3是否与OpenGL ES 2.0相当。 换句话说,鉴于我即将为桌面和Android制作游戏引擎,我是否应该特别注意OpenGL 3.x +和OpenGL ES 2.0? 这也可以包括OpenGL 4.x版本。 例如,如果我开始阅读本书,如果我计划将引擎移植到Android(当然使用NDK),我是否会浪费时间?)?

Android OpenGL应用程序在加载到模拟器后停止工作

我的OpenGL应用程序都无法使用“名称已停止工作”。 即使使用Android示例项目(BasicGLSurfaceView)也会发生这种情况。 当我将项目加载到Cclipse并运行它们时,它们不起作用,但是如果我运行模拟器并通过API演示选择它,它可以完美地工作。 运行最新的Eclipse和API 14.0。 这也发生在我的应用程序看起来完美无瑕 这是来自BasicGLSurfaceView,它简单地加载到Eclipse中并运行 Logcat崩溃—————– 11-19 21:35:52.887: E/AndroidRuntime(556): FATAL EXCEPTION: GLThread 75 11-19 21:35:52.887: E/AndroidRuntime(556): java.lang.IllegalArgumentException: No configs match configSpec 11-19 21:35:52.887: E/AndroidRuntime(556): at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:825) 11-19 21:35:52.887: E/AndroidRuntime(556): at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:981) 11-19 21:35:52.887: E/AndroidRuntime(556): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1335) 11-19 21:35:52.887: E/AndroidRuntime(556): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1189) 安慰 – – – – – – – – – – – […]

Android Studio GPU监视器不适用于OpenGLES2

如何在Android上监控我的OpenGLES2应用程序的GPU使用情况? Android Studio中的GPU监视器似乎忽略了OpenGL GPU的使用。 请注意,我在开发人员选项中启用了gpu渲染配置文件 ,并将其设置为在adb shell dumpsys gfxinfo中显示 。 GPU监视器似乎运行,但看起来甚至没有使用GPU。 如何监控OpenGLES应用程序的GPU使用情况? 谢谢 !

在Android下使用OpenGLES 2.0的基于像素的碰撞检测问题

这是我在这里的第一篇文章,因此对任何错误道歉。 我正在开发一个使用OpenGL ES 2.0和Android 2.3的简单动作游戏。 我目前正在研究的游戏框架基于二维精灵,它存在于三维世界中。 当然,我的世界实体拥有诸如虚拟世界中的位置,float []矩阵forms的旋转值,OpenGL纹理句柄以及Android的Bitmap句柄等信息(我不确定后者是否是必要的,因为我正在做使用OpenGl机器的光栅化,但暂时它就在那里,为了我的方便)。 这是一个简短的背景,现在是有问题的问题。 目前我坚持使用基于像素的碰撞检测,因为我不确定我需要采样哪个对象(这里是OGL纹理或Android Bitmap)。 我的意思是,我已经尝试过对Android的Bitmap进行采样,但它完全不适用于我 – 许多运行时崩溃与位图外部的读取有关。 当然为了能够从位图读取像素,我使用了Bitmap.create方法来获得正确旋转的精灵。 这是代码片段: android.graphics.Matrix m = new android.graphics.Matrix(); if(o1.angle != 0.0f) { m.setRotate(o1.angle); b1 = Bitmap.createBitmap(b1, 0, 0, b1.getWidth(), b1.getHeight(), m, false); } 另一个问题,可能会增加问题,甚至是主要问题,是我的交叉矩形(矩形表示两个对象的两个空间相互)是从两个边界框的部分构建的,这两个边界框是使用OpenGL矩阵Matrix.multiplyMVfunction(下面的代码)。 可能是,那两个Android和OpenGL矩阵的计算方法不相等? Matrix.rotateM(mtxRotate, 0, -angle, 0, 0, 1); // original bitmap size, equal to sprite size in it’s model […]

在OpenGL ES 2中绘制文本的正确方法

我正在使用PowerVR OpenGL ES 2 SDK在Windows上用C ++开发我的游戏然后我可以将它移植到android或iphone。 一切看起来都不错,但我现在仍然坚持使用文字渲染。 我找不到任何关于使用C ++在OpenGL ES 2.0中渲染文本(使用TTF或Bitmap字体)的详细教程。 我发现很多主题都是关于使用java或objective-c(带有textview,surfaceview或者某些等等)在android或iphone上渲染文本的话题,但我不认为这就是我需要的东西。 我需要一个“跨平台解决方案”。 (或者在这一点上我可能错了?) 经过一番研究,我脑子里有了解决方案: 加载和绑定位图字体纹理 – > 解析文本并生成和绑定顶点数组,使用uv数组映射纹理,… – >将其渲染到屏幕 我还没有测试但是我认为在使用我的解决方案时这是一个问题:当我想要更改文本时(例如:我正在制作用户评分或屏幕上的计时器)我必须重新绑定顶点数组和uv数组,这不是一个好主意,对吧? 有没有更好的方法/正确的方法在OpenGL ES 2屏幕上绘制位图字体?

如何处理GPU的内存限制,以便在GPU上进行高分辨率image processing?

我正在制作相机应用程序,这个应用程序将为用户提供一些filter。 目前我的代码是在NDK上,它工作正常,但我想让它更快一点。 似乎GPU和opengl Es 2.0是要走的路。 我唯一担心的是GPU的内存限制。 由于现代相机需要5-10 mp的图像,而GPU内存限制远远低于此。 我想知道是否有办法解决这个限制。 在我看来,唯一合乎逻辑的选择是将图像分成较小的部分,然后在GPU上处理它们,最后将它们分配给最终图像。 我的问题是,如果这种方法仍然有利于性能,还有任何其他选项可以在移动GPU上处理高分辨率图像。 编辑:我需要澄清我想使用GPU进行image processing,所以我的目标不是将结果渲染到屏幕上。 我将它渲染到另一个纹理并将其保存到磁盘。

如何在OpenGL ES 2.0 Android中绘制基本圆

我是OpenGL ES 2的新手,我已经阅读了很多关于如何在Android上的OpenGL ES 2中绘制圆圈的主题。 基于Drawing Shapes和gamedev.net上的代码 ,我可以绘制三角形和quares,但我仍然不知道如何画圆。 我现在有三种绘制圆圈的方法: 生成圆形顶点并使用glDrawArray(GL_LINES,…)。 根据您生成的顶点数量,这将产生一个漂亮而清晰的结果。 使用圆的预生成纹理(具有Alpha透明度)并将其映射到四边形。 这将产生非常平滑的图形并允许“快速”圆圈,但它不会那么灵活:即使使用mipmapping,您也希望纹理与渲染四边形的大小相同。 使用片段着色器。 但是我该如何实现它们呢?

使用OpenGL ES 2.0的Android动态壁纸?

有没有人设法让OpenGL ES 2.0在动态壁纸中工作? 我有一个使用OpenGL ES 2.0的类,可以作为GLSurfaceView的渲染器运行良好。 但是,我希望它能够用作动态壁纸。 我find了Robert Green的GLWallpaperService,但这是基于较旧版本的GLSurfaceView,并且不支持运行OpenGL ES 2.0所需的setEGLContextClientVersion。