0

私はopenglとandroidが初めてで、フォーラムで答えが見つからなかったので、ここにいます...

2 つの三角形の交点のみを「描画」できる必要があります。ステンシル テストを使用しようとしましたが、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);
}

助けてくれてありがとう

4

1 に答える 1

0

最初の三角形には gl.glDepthFunc(GL10.GL_ALWAYS) を試してください。

(ちなみに、2D 頂点を使用する場合、深度バッファーにはどのような z 値が入りますか?それは視錐台の近い面になると仮定しますが、明確に見つけることはできません...)

于 2010-10-20T14:31:57.550 に答える