У меня есть мир, полный 2D-квадратов (z = 0). При запуске I проекции установки таким образом, что весь мир виден на экране, используя:Как выполнить проверку видимости объекта на Android OpenGL ES
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(left, right, bottom, top, zNear, zFar);
Тогда я позволить пользователю, чтобы увеличить в мире с пальцами, используя:
gl.glScalef(mScaleFactor, mScaleFactor, 1.0f);
Я хочу сделать проверку видимости для объектов, которые выглядят не видимыми, поскольку пользователь приближается, чтобы не отображать их (повышение производительности). Я нашел этот метод:
android.opengl.Visibility.visibilityTest(float[] ws, int wsOffset, float[] positions, int positionsOffset, char[] indices, int indicesOffset, int indexCount);
Но я не могу заставить его работать, ни я не нашел какие-либо примеры использования этого метода в сети Интернета. В настоящее время этот метод возвращает результат = 0 для каждого теста квадрат I, даже если масштабирование не применяется (mScaleFactor = 1,0)
То, как я это делаю:
final short SQUARE_VERTICES_ORDER_TEMPLATE[] = {0, 1, 2, 0, 2, 3};
.....
float[] vertices = toArray(mVertexBuffer);
short[] indices = toArray(mIndicesBuffer);
char[] charIndices = new char[indices.length];
// method needs char[]
for (int i = 0; i < indices.length; i++) {
short shortIndex = indices[i];
charIndices[i] = (char) shortIndex;
}
for (int i = 0; i < mSquares.size(); i++) {
int numIndicesPerSquare = SQUARE_VERTICES_ORDER_TEMPLATE.length;
int indicesOffset = i * numIndicesPerSquare;
int result = Visibility.visibilityTest(matrixGrabber.mProjection, 0, vertices, 0, charIndices, indicesOffset, numIndicesPerSquare);
switch (result) {
case 0:
Log.v(TAG, "Object NOT VISIBLE: " + mSquares.get(i)); // hits every time
break;
case 1:
Log.v(TAG, "Object PARTIALLY VISIBLE: " + mSquares.get(i));
break;
default:
TAG.toString(); // to place a break point
break;
}
}
Я не уверен, если я 'm собирание правильной матрицы, требуемой этим методом. Не могли бы вы проверить правильность использования этого метода или дать какие-либо другие советы или обходные пути?