Android Opengl 2d两个图形对象之间的交点

时间:2010-10-20 12:32:32

标签: android opengl-es 2d buffer depth

我是opengl和android的新手,在论坛上找不到答案,所以我在这里......

我需要能够'画'仅两个三角形的交点。我尝试使用模板测试但它在Android模拟器中不起作用。

然后我尝试使用深度测试,它只能工作几分之一秒,然后屏幕变成空白。

我有一个深度为8的配置。

我做错了什么?

这是我为绘制2D'场景'而编写的原始代码,以验证裁剪是否有效

      gl.glEnable(GL10.GL_DEPTH_TEST);

  gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT   | GL10.GL_STENCIL_BUFFER_BIT);

  gl.glColorMask(false, false, false, false);

  outlineColor.setAsActive(gl);

  triangleOne(gl);

  gl.glDepthFunc(GL10.GL_EQUAL);

  gl.glColorMask(true, true, true, true);

  fillColor.setAsActive(gl);

  triangleTwo(gl);

  gl.glDisable(GL10.GL_DEPTH_TEST);

以下是三角形......

private void triangleOne(GL10 gl) {
  float[] coords = { 1f, height, width, height / 2, 1f, 1f };
  drawItem(gl, 2, coords);
}

private void triangleTwo(GL10 gl) {
  float[] coords = { width, height, width, 1f, 1f, height / 2 };
  drawItem(gl, 2, coords);
}

private void drawItem(GL10 gl, int size, float[] coords){
  fillColor.setAsActive(gl);
  FloatBuffer vertexBuffer;
  ByteBuffer vbb = ByteBuffer.allocateDirect(coords.length * 4);
  vbb.order(ByteOrder.nativeOrder());
  vertexBuffer = vbb.asFloatBuffer();
  vertexBuffer.put(coords);
  vertexBuffer.position(0);

  gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
  gl.glVertexPointer(size, GL10.GL_FLOAT, 0, vertexBuffer);
  gl.glDrawArrays(GL10.GL_TRIANGLES, 0, vertexBuffer.capacity() / size);
  gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

尝试gl.glDepthFunc(GL10.GL_ALWAYS)作为第一个三角形。

(顺便说一句,如果你使用2D顶点,那么z值会在深度缓冲区中结束吗?假设它将是你的视锥体的近平面,但是找不到明确的......)