#android #opengl-es #arcore
Вопрос:
В проекте расширенного отслеживания лиц мне нужно получить координаты экрана для конкретной точки лица, имеющей вершины сетки, нормали сетки. Я знаю решение с помощью sdk sceneform, но я не хочу его использовать, так как в нем есть ошибка на Samsung Galaxy S9 (лицо обнаружено с отклонением влево и вверх). Я пытаюсь получить координаты экрана точки дополненного лица таким образом, но получаю неправильные результаты
val x1 = face.meshVertices.get(FACE_UPPER_CENTRAL_POINT * 3)
val y1 = face.meshVertices.get(FACE_UPPER_CENTRAL_POINT * 3 1)
val z1 = face.meshVertices.get(FACE_UPPER_CENTRAL_POINT * 3 2)
val x2 = face.meshVertices.get(FACE_LOWER_CENTRAL_POINT * 3)
val y2 = face.meshVertices.get(FACE_LOWER_CENTRAL_POINT * 3 1)
val z2 = face.meshVertices.get(FACE_LOWER_CENTRAL_POINT * 3 2)
val point1 = getScreenCoordinates(Vector3(x1, y1, z1), viewMatrix, projectionMatrix)
val point2 = getScreenCoordinates(Vector3(x2, y2, z2), viewMatrix, projectionMatrix)
забавные координаты getScreenCoordinates(координаты: Вектор3, матрица просмотра: FloatArray, матрица проекции: FloatArray): Вектор2 {
val view = IntArray(4)
view[0] = 0
view[1] = 0
view[2] = App.helper.getDisplayWidth()
view[3] = App.helper.getDisplayHeight()
val pos = FloatArray(4)
GLU.gluProject(coord.x, coord.y, coord.z, viewMatrix, 0, projectionMatrix, 0, view, 0 , pos, 0)
return Vector2(pos[0], pos[1])
}
Любая помощь очень ценится!