【发布时间】:2016-01-18 04:34:37
【问题描述】:
我们使用适用于 android 的 Opengl ES 2.0 并试图显示两个相互堆叠的立方体。为此,我们有两个顶点缓冲区(mCubePositions1 和 mCubePositions2),它们存储 Cubedata(顶点组合成三角形)并为每个顶点调用单独的绘制方法:
GLES20.glVertexAttribPointer(mPositionHandle, mPositionDataSize, GLES20.GL_FLOAT, false,0, mCubePositions1); //the second time mCubePositions2
GLES20.glEnableVertexAttribArray(mPositionHandle);
//some Code concerning lightning and textures
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 36);
结果是显示了两个立方体,但是如果我们让它们旋转,第二个绘制的立方体总是显示在顶部(第二个立方体通过第一个发光)。 在 onSurfaceCreated 方法中,我们初始化深度缓冲区:
// Set the background clear color to black.
GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GLES20.glClearDepthf(1.0f);
// Use culling to remove back faces.
GLES20.glEnable(GLES20.GL_CULL_FACE);
// Enable depth testing
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
GLES20.glDepthFunc(GLES20.GL_LEQUAL);
GLES20.glDepthMask(true);
有一种解决方案将两个缓冲区合并为一个,而不是只调用一个绘制方法,但这对我们来说不是一个解决方案,因为我们想单独移动立方体。
如果这不是足够的代码来回答,请询问更多。
感谢您的每一个回答:)
【问题讨论】:
-
在初始化
GLSurfaceView时是否有setEGLConfigChooser()调用?如果是,您是否在那里请求深度缓冲区? -
非常感谢。我们因为教程而调用了该方法,但不知道所有参数的含义。为深度缓冲区添加一个值解决了我们的问题:)
标签: java android opengl-es opengl-es-2.0