2010-10-20 55 views
0

我是新来的OpenGL和Android找不到在论坛所以在这里我的答案之间的2D路口...的Android的Opengl个图文对象

我需要能够只对“画”两个三角形的交集。我试图使用模板测试,但它不能在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); 
} 

感谢您的帮助

回答

0

尝试第一个三角形的gl.glDepthFunc(GL10.GL_ALWAYS)。如果你使用2D顶点,那么什么z值最终在深度缓冲区?假设它将是你的视锥体的近平面,但是找不到明确的......)