Tag: opengl es

Android系统。 如何沿对象方向移动对象(使用Vector3和Quaternion)

我正在使用libGDX(实际上相当新)和Android。 我想在它面向的方向上移动3d对象(使用一些速度)。 我认为这是一个基本问题,但找不到直接的问题。 我有一个表示对象旋转(方向)的四元数,我有一个表示对象位置的Vector3。 问题是如何使用Quaternion中的信息更新位置Vector3,以便在Quaternion表示的方向上移动对象。 (另一种选择是从Quaternion中提取滚动俯仰和偏航,并通过应用三角计算获得新的坐标。但我认为必须有一种方法可以使用Vector3和Quat来实现这一点。)

强制OpenGL Buffer使用GL 1.0或1.1?

我一直致力于一个项目,用户可以在其中与GLSurfaceView交互以在屏幕上绘制形状。 这一切都很好,花花公子,但现在我尝试做两件事:1)创建他们的绘图的缩略图,2)保存他们的绘图。 重要的是要注意用户可以绘制比屏幕大的图像。 就我的研究表明,最好使用Bitmap (可以是1)渲染到Canvas的缩略图,2)保存到文件系统,这实现了我的两个目标)。 最初,我试图通过glReadPixels从GLSurfaceView读取Renderer ,但事实certificate我无法从中获取屏幕外数据。 相反,我选择做一个离屏缓冲区来生成图像的渲染,可以将其转换为Bitmap 。 我发现了一个可爱的post ,它提供了一个名为PixelBuffer的类的代码,我现在正在使用它。 (我做了一些调整,但所有问题都发生在有或没有调整的情况下。) 现在,当使用代码的getBitmap()时(我将在PixelBuffer论坛线程不可读的情况下发布),我得到了一堆被called unimplemented OpenGL ES API 。 起初这让我很奇怪,所以我做了一些调查。 事实certificate,由于某种原因, PixelBuffer类使用的是OpenGL ES 2.0,而GLSurfaceView使用的是OpenGL ES 1.1。 我正在使用的设备(Galaxy Nexus)不支持2.0。 (而且,我想支持最大范围的设备。) 所以,这是我的问题 :如何强制我的PixelBuffer类使用OpenGL ES 1.1 API? 我已经在我的Manifest中添加了以下内容: 另外,我试图使用int[] version = new int[] { 1, 1 };设置版本int[] version = new int[] { 1, 1 }; ,无济于事。 我正在使用的PixelBuffer代码: 链接 。 […]

LibGDX FreeType字体模糊

我正在使用屏幕高度百分比动态生成我的字体并设置百分比(显然将来乘以密度)。 一些笔记。 我正在读OTF文件。 使用最新版本的LibGDX(版本1.2.0) 我有以下问题:(字体中的大断裂,看起来非常模糊,但只在中等 。 大小看起来非常尖锐) 我的预设字体大小: //Font sizes, small, med, large as a percentage of the screen. public static float FONT_SIZE_LARGE = 0.175f, FONT_SIZE_MEDIUM = 0.06f, FONT_SIZE_SMALL = 0.04f; 我的字体生成器设置 FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter(); FreeTypeFontGenerator generator; this.generator = new FreeTypeFontGenerator(Gdx.files.internal(filename)); 创建实际字体: //Create a new font and add it to available font sizes. […]

如何在libgdx中使用简单的纹理绘制自定义形状?

我想在我的游戏中绘制自定义静态形状,就像愤怒的小鸟一样: 但问题是纹理是方形的。 我们如何告诉“SpriteBatch”绘制带有一些顶点的形状? 有没有人有想法?

在OpenGL和OpenGLES中使用glVertexAttribPointer

我正在阅读关于OpenGL和OpenGLES的教程,我对在这两个API中使用函数glVertexAttribPointer感到有些困惑。 在OpenGL教程中,此函数使用数字偏移量作为最后一个参数(使用const GLVoid *进行转换),我认为顶点直接取自当前的数组缓冲区。 glVertexAttribPointer(vs_position, 2, GL_FLOAT, GL_TRUE, 5 * sizeof(GLfloat), (const GLvoid*) (3*sizeof(GLfloat)) ); 在OpenGLES教程中,最后一个参数直接指向表示顶点的结构: GLFloat vertices[] = {…definition}; glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices); 我无法理解这两个function是如何工作的。 它们完全不同吗?

将3D世界(arcore锚/姿势)转换为其对应的2D屏幕坐标

我正在努力实现这一转变。 给定arcore中的锚Pose如何在屏幕中获得相应的2D坐标?

如何在OpenGL ES 2中创建和使用VBO

我正在寻求帮助理解维生素生态系统。 我做了大量的研究,并找到了关于这个主题的教程,但它们对我来说仍然含糊不清。 我有几个问题: 应该在哪里创建VBO,我应该如何创建VBO? 我目前正在使用下面的代码来初始化我的顶点和索引缓冲区: vertices = new float[] { p[0].x, p[0].y, 0.0f, p[1].x, p[1].y, 0.0f, p[2].x, p[2].y, 0.0f, p[3].x, p[3].y, 0.0f, }; // The order of vertex rendering for a quad indices = new short[] {0, 1, 2, 0, 2, 3}; ByteBuffer bb = ByteBuffer.allocateDirect(vertices.length * 4); bb.order(ByteOrder.nativeOrder()); vertexBuffer = bb.asFloatBuffer(); vertexBuffer.put(vertices); vertexBuffer.position(0); ByteBuffer […]

Android GPU分析 – OpenGL动态壁纸很慢

我正在使用OpenGL ES 3.0开发动态壁纸。 我根据http://www.learnopengles.com/how-to-use-opengl-es-2-in-an-android-live-wallpaper/上的优秀教程进行设置,调整GLSurfaceView并在里面使用它动态壁纸。 我对OpenGL / GLSL最佳实践有很好的了解,并且我已经设置了一个简单的渲染管道,其中绘制循环尽可能紧密。 没有重新分配,使用一个静态VBO用于非变化数据,一个动态VBO用于更新,仅使用一个绘制调用,在着色器等中没有分支。 我通常会获得非常好的表现,但在看似随机但又重复的时候,帧速率会下降。 使用屏幕栏进行分析可以得到黄色条(“等待命令完成”)射击的间隔,并将所有内容都高于关键的60fps阈值。 我已经阅读了任何关于剖析和解释我可以得到的数字的资源,包括这里非常深入的SO问题 。 然而,该问题的主要内容似乎是黄色条表示等待阻塞操作完成所花费的时间,以及帧依赖性 。 我不相信我有任何这些,我只是在每一帧画出一切。 没有阅读 。 我的问题很广泛 – 但我想知道什么事情会导致这种类型的帧率下降,以及如何推进这个问题。 以下是可能会或可能不会产生影响的一些细节: 我正在按需渲染,onOffsetsChanged是触发器(脏时渲染)。 有一个单一纹理(仅创建并绑定一次),1024×1024 RGBA。 用普通的vec4替换一个texture2D调用似乎有助于删除一些帧率下降。 将纹理大小减小到512×512对性能没有任何帮助。 着色器并不复杂,如前所述,不包含分支。 场景中没有太多数据。 只有约300个顶点和一个纹理。 systrace没有显示可疑方法 – GL相关方法(如缓冲区填充和状态调用)不在列表的顶部。 更新:作为一个实验,我试图只渲染每一个帧 ,而不是每次onOffsetsChanged(向左/向右滑动)请求渲染。 这对于外观和感觉来说太可怕了,但几乎完全摆脱了黄色的滞后尖峰。 这似乎告诉我,每帧做60个请求太多了,但我无法弄清楚为什么。

GLSurfaceView / SurfaceView重叠

我之前问了一个关于这个的问题,但没有收到回复,所以我再试一次。 我需要在摩托罗拉Xoom,Android 3.0上做一些带有标签和图形的渲染2D图片。 虽然我只需要SurfaceView(Canvas)或GLSurfaceView就可以完成,但我真的很想使用它们,因为使用GLSurfaceView渲染速度更快,而SurfaceView的标签和图形更容易使用。 视觉布局如下所示。 我试图通过在GLSurfaceView之后在布局XML中声明它来将SurfaceView置于顶部。 SurfaceView是透明的(除了我明确绘制的东西),以便仍然可以看到GLSurfaceView。 这种方法非常适用于一个巨大的例外。 我在GLSurfaceView区域中的SurfaceView上绘制的任何内容都根本不显示。 为了validation这一点,我绘制了一些正好位于边界上的文本(一些位于共享区域,一些位于SurfaceView区域中),并且它在GLSurfaceView边界处被切断。 我已经尝试使用“bringToFront”方法来解决这个问题,但它没有奏效。 任何人都可以给我一些关于为什么这不起作用或我能做些什么的想法? 是GLSurfaceView在前面,还是GLSurfaceView直接写入video内存,所以如果它前面有什么东西并不重要?

Opengl ES 2.0:获取纹理大小和其他信息

问题的背景是Android环境中的OpenGL ES 2.0。 我有一个纹理。 没问题可以显示或使用它。 是否有一种方法可以从其绑定ID开始知道它的宽度和高度以及其他信息(如内部格式)? 我需要在不知道纹理大小的情况下将纹理保存到位图。