2010-10-20 22 views
0

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

Répondre

0

Essayez gl.glDepthFunc (GL10.GL_ALWAYS) pour le premier triangle.

(BTW, ce que la valeur z finit dans la mémoire tampon de profondeur si vous utilisez vertex 2D? On suppose que ce sera le plan près de votre point de vue cône tronqué, mais ne trouve pas pour certain ...)