Je suis nouveau à opengl et android et ne pouvait pas trouver une réponse dans les forums donc ici je suis ...Android Opengl 2d intersection entre deux objets graphiques
Je dois être en mesure de « dessiner » seulement l'intersection de deux triangles. J'ai essayé d'utiliser le test de pochoir, mais cela ne fonctionne pas dans l'émulateur Android.
Puis j'ai essayé d'utiliser le test de profondeur et cela fonctionne mais seulement pour une fraction de seconde, puis l'écran devient vide.
J'ai une config avec la taille de profondeur 8.
Qu'est-ce que je fais mal?
Voici le code brut je l'ai écrit pour vérifier que l'écrêtage pour dessiner 'scène' 2D fonctionne
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);
Et voici les triangles ...
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);
}
Merci de nous aider