Articles of opengl es 2.0

GLSurfaceView在Android 4.2的Nexus 7上显示黑色

我有一个OpenGL ES2.0应用程序正在运行各种Android版本从2.2到4.1的设备。 但是有人告诉我,在Android 4.2的Nexus 7上运行时,应用程序中的3D图形都是黑色的。 操作栏和对话框工作正常。 我已经在模拟的Nexus 7上试用了它,它采用了英特尔凌动处理器,启用了HAX和GPU,运行4.2.2并且运行正常。 我宁愿运行ARM映像,但似乎不包括Open GL ES2.0 有没有人能够深入了解Nexus 7上可能导致此问题的原因以及如何解决这个问题? 一种可能性是当前App版本的目标API级别设置为15,而4.2.2是级别17.这可能是个问题吗? 它虽然在模拟器上运行正常。 下面是我用来在渲染器onSurfaceCreated()中设置纹理的代码,以防有任何帮助。 /** * Sets up texturing for the object */ private void setupTextures(String[] texFiles) { // create new texture ids if object has them // number of textures mTextureIDs = new int[texFiles.length]; GLES20.glGenTextures(texFiles.length, mTextureIDs, 0); for(int i = 0; i […]

GLSurfaceView onDrawFrame清除行为

我使用GLSurfaceView遇到了不同的行为。 AFAIK是程序的责任,清除每帧的缓冲区(颜色和深度)。 这意味着如果我不清除缓冲区,我会得到最后一帧的内容(或者之前用于双缓冲的内容)。 看起来好像缓冲区已被清除,无论在某些设备上是什么。 我在Addison Wesley OpenglES2.0编程指南中对一些具有不同结果的测试设备运行了“Hello Triangle”程序的以下修改: Acer Iconia A500(4.0.3): 未清除(预期行为) Sony XPERIA Go(4.0.4):已清除 Galaxy S3(4.1.1):清除 LG Optimus 4x HD(4.0.3): 未清除 三星Galaxy Tab 20.1(4.0.4): 未清除 摩托罗拉Xoom(3.2): 未清除 Galaxy S2(4.1.2 – rooted):清除 有没有办法强制获得每个绘制回调的未更改缓冲区? 清除屏幕的设备的结果如下所示: 测试活动如下所示: package com.example.glcleartest; import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; import android.opengl.GLES20; import android.opengl.GLSurfaceView; import android.opengl.GLSurfaceView.Renderer; […]

无法实现60fps渲染简单的四核,Android,Opengl ES 2.0

我正在研究一种简单的乒乓球游戏,以掌握opengl和android,并且在性能方面似乎已经打了一堵砖墙。 我的游戏逻辑在一个单独的线程上,draw命令通过阻塞队列发送到gl线程。 问题是我被困在40fps左右,我尝试过的任何东西似乎都没有提高帧速率。 为了简单起见,我设置了opengl: GLES20.glDisable(GLES20.GL_CULL_FACE); GLES20.glDisable(GLES20.GL_DEPTH_TEST); GLES20.glDisable(GLES20.GL_BLEND); 设置opengl程序和绘图由以下类处理: class GLRectangle { private final String vertexShaderCode = “precision lowp float;” + // This matrix member variable provides a hook to manipulate // the coordinates of the objects that use this vertex shader “uniform lowp mat4 uMVPMatrix;” + “attribute lowp vec4 vPosition;” + “void main() {” + […]

如何使用近处和远处位置识别3D对象内部或外部3D对象的单击

我正在使用带有Android,Java代码的OpenGLES 2.0进行3D对象渲染。如何使用以下代码在近处和远处位置识别3D对象内部或外部3D对象? public static PointF screenToWorld(float[] viewMatrix, float[] projMatrix, float screenX, float screenY) { float[] nearPos = unProject(viewMatrix, projMatrix, screenX, screenY, 0); float[] farPos = unProject(viewMatrix, projMatrix, screenX, screenY, 1); Log.d(LOGTAG,”nearPos ->”+nearPos.length+” “+nearPos); Log.d(LOGTAG,”farPos ->”+farPos.length+” “+farPos); // The click occurred in somewhere on the line between the two points // nearPos and farPos. We want […]

如何使用着色器对使用GL_LINES和OpenGL ES 2.0绘制的线条进行着色

我有一个使用OpenGL ES 2.0的Android应用程序。 我需要从一个数组中绘制10行,每个数组都由起点和终点描述。 所以有10行= 20点= 60浮点值。 没有连接点,因此数组中的每对点都与其他点无关,因此我使用GL_LINES绘制。 我通过将值放入浮点缓冲区并调用一些帮助程序代码来绘制它们: public void drawLines(FloatBuffer vertexBuffer, float lineWidth, int numPoints, float colour[]) { GLES20.glLineWidth(lineWidth); drawShape(vertexBuffer, GLES20.GL_LINES, numPoints, colour); } protected void drawShape(FloatBuffer vertexBuffer, int drawType, int numPoints, float colour[]) { // … set shader … GLES20.glDrawArrays(drawType, 0, numPoints); } drawLines采用浮动缓冲区(60浮点数),线宽,点数(20)和4浮点颜色值数组。 我没有显示着色器设置代码,但它基本上将颜色variables暴露给统一的uColour值。 拾取uColour的片段着色器只是将其直接插入输出。 /* Fragment */ precision mediump float; […]

在我的原生C ++ Android程序中缺少glShaderModel库

我不确定我需要为此错误添加什么库: ../arm-linux-androideabi/bin/ld.exe: ./obj/local/armeabi/objs/PhysicsLessons/PhysicsLessons.o: in function engine_handle_cmd(android_app*, int):jni/PhysicsLessons.cpp:104: error: undefined reference to ‘glShadeModel’ 在Android.mk我有这个: LOCAL_LDLIBS := -lm -lEGL -lGLESv2 -llog -landroid LOCAL_STATIC_LIBRARIES := android_native_app_glue 在Application.mk中,我是APP_PLATFORM=android-10 我正在使用ndk8e

OpenGL ES 2.0相机问题

我正在使用Android和OpenGL ES 2.0,我遇到的问题是我无法真正解决这个问题。 在图像http://img.androidcookie.com/android/XuCHF.png中 ,我基本上有一个形状来代表中间的船只,当它移动到侧面时,它会向消失点伸展。 我想要完成的是让船在移动时保持其大部分形状。 我相信这可能是由于我的矩阵,但我看过的每一种资源似乎都使用相同的方法。 //Setting up the projection matrix final float ratio = (float) width / height; final float left = -ratio; final float right = ratio; final float bottom = -1.0f; final float top = 1.0f; final float near = 1.0f; final float far = 1000.0f; Matrix.frustumM(projection_matrix, 0, left, right, bottom, […]

LibGDX SpriteBatch Multitexture可能吗?

我很高兴使用LibGDX Framework的SpriteBatch类。 我的目标是通过着色器修改精灵的表示。 batch = new SpriteBatch(2, shaderProgram); 我从SpriteBatch类中复制了默认着色器,并添加了另一个统一的Sampler 2d + “uniform sampler2D u_Texture2;\n”// 是否有一种工作方式将纹理赋予着色器。 这样做,总是在ClearColor屏幕中结束。 batch.begin(); texture2.bind(1); shaderProgram.setUniformi(“u_Texture2”, 1); batch.draw(spriteTexture,positions[0].x,positions[0].y); batch.draw(spriteTexture,positions[1].x,positions[1].y); batch.end(); 每个纹理都在工作。 在Mesh类的帮助下手动绘制按预期工作。 那么我该怎么做才能使用SpriteBatch的便利呢? THX寻求帮助

Android OpenGL ES 2.0仅限于内存中的16个纹理?

基本上当我使用OpenGL ES 2.0在Android Studio中开发应用程序时,我遇到了一个我无法解决的大问题,而且它一直困扰着我一个星期。 因此,任何时候我在内存中加载超过16个,可能是17个任意大小的纹理,并试图通过我在Genymotion中的模拟器或我的ASUS平板电脑在2D中显示它们,它开始显示的不同于我绑定的图像特定索引,或根本不显示。 然而,如果我通过我的三星Galaxy S6运行它,它运行正常。 但是,如果我加载16个或更少的纹理,它可以在我测试它的所有设备上运行,包括模拟器。 这让我尝试了一个小实验,看看它是否会显示字母图像az,每个字母为16×16 png,都在我的drawable文件夹中。 显示每个字母时,屏幕上的尺寸为80×80,这样我就能看到它们。 所以我试着让它通过“z”运行“a”。 在模拟器上,以及我的平板电脑,它只显示“a”到“o”,在“p”结尾处有一个“z”,并在那里停止。 在我的三星Galaxy上,它实际上显示了“a”到“z”,并做了它想象的那样。 考虑到我在常量中将纹理数设置为27或甚至更高,这对于为什么它不能正确加载到其他设备上没有任何意义。 我希望我能解释我的问题。 而且我很确定它们都能够加载超过16个纹理,所以我必须对我的代码做错。 我没有展示整个项目,而是向您展示问题所在的相关领域。 任何帮助表示赞赏,并提前感谢。 这是我的代码: 常量: public class Constants { public static final int BYTES_PER_FLOAT = 4; public static final int POSITION_COMPONENT_COUNT = 4; public static final int NORMAL_COMPONENT_COUNT = 3; public static final int COLOR_COMPONENT_COUNT = 4; public static […]

使用矩阵。 在OpenGL ES 2.0中旋转

编辑 – 添加了更多代码 尝试使用OpenGL ES 2.0正确旋转我的四边形时遇到很多问题。 它似乎总是围绕屏幕坐标的中心旋转。 我试图让它围绕它自己的中心旋转(2d,所以只有z轴)。 我一直在尝试使用Matrix.translate,如下所示。 但是,在此处更改x或y pos只是将四边形绘制在屏幕上的不同位置,但是当它旋转时,它再次围绕屏幕的中心旋转。 请有人解释一下如何让它围绕它自己的z轴旋转(就像一个轮子)? 谢谢,这里是相关的代码行 – 如果需要更多,请询问,我会发布。 (请注意,我在SO和更广泛的互联网上看了很多类似的问题,但到目前为止我还没find答案)。 谢谢。 //Set rotation Matrix.setRotateM(mRotationMatrix, 0, -angle, 0, 0, 1.0f); //Testing translation Matrix.translateM(mRotationMatrix, 0, -.5f, .5f, 0f); // Combine the rotation matrix with the projection and camera view Matrix.multiplyMM(mvpMatrix, 0, mRotationMatrix, 0, mvpMatrix, 0); 我的着色器(在class级宣布) private final String vertexShaderCode = […]