这个问题让我一无所知:我在透视投影中渲染OpenGL ES场景,在正投影中使用了一些2D叠加。在我的手机(Galaxy S4)上,它完美无瑕。但是,在模拟器上,我没有看到任何。 我已将代码简化为仅设置正交投影并绘制三角形。你们中的任何人都可以对这里的问题有所了解吗?再说一遍:在手机上,这段代码在模拟器上显示一个白色三角形,我什么也看不见。每帧都会调用以下(简化)代码。
GLES10.glMatrixMode(GLES10.GL_PROJECTION);
GLES10.glLoadIdentity();
GLES10.glOrthof(0, windowWidth, 0, windowHeight, 0.0f, 1.0f);
GLES10.glMatrixMode(GLES10.GL_MODELVIEW);
GLES10.glLoadIdentity();
GLES10.glDisable(GLES10.GL_LIGHTING);
GLES10.glDisable(GLES10.GL_DEPTH_TEST);
GLES10.glDisable(GLES10.GL_CULL_FACE);
FloatBuffer vertexBuffer = OpenGLUtils.allocateFloatBuffer(4 * 6);
vertexBuffer.put(40);
vertexBuffer.put(20);
vertexBuffer.put(40);
vertexBuffer.put(60);
vertexBuffer.put(80);
vertexBuffer.put(20);
vertexBuffer.position(0);
GLES10.glClear(GLES10.GL_COLOR_BUFFER_BIT);
GLES10.glEnableClientState(GLES10.GL_VERTEX_ARRAY);
GLES10.glVertexPointer(2, GLES10.GL_FLOAT, 0, vertexBuffer);
GLES10.glDrawArrays(GLES10.GL_TRIANGLES, 0, 3);
(当然,每帧重新创建vertexBuffer都很愚蠢 - 但如果我每帧都创建它,它在(视觉)结果中没有变化)。 为了完整起见,这是openGL的初始化代码:
GLES10.glViewport(0, 0, windowWidth, windowHeight);
GLES10.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GLES10.glShadeModel(GLES10.GL_SMOOTH);
手机的分辨率为1920 x 1080(windowWidth / windowHeight),而模拟器则使用1024x600。
我试过的一些事情(没有成功):
任何见解?
P.s。:是的:这是严格的GL ES 1.0 - 我可能会使用1.1 - 但我还没准备好着色器,但是:)
答案 0 :(得分:1)
原来问题在于在模拟器上切换PROJECTION_MATRIX和MODELVIEW_MATRIX:由于某种原因,模拟器清除标志“GL_TEXTURE_2D”。我为3D绘图启用了它,切换到正交投影,绘制了叠加层,切换回透视图---此时GL_TEXTURE_2D被禁用。在每个帧上启用它解决了这个问题。