Я новичок в 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);
}
Спасибо за помощь