Как проверить, пересекается ли 3D-объект с лучом в OpenGL ES 2 - Android - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в OpenGL. Я нарисовал несколько трехмерных фигур на glSurfaceView в Android. Теперь я хочу найти объект, на который нажал пользователь, когда пользователь касается экрана. У меня есть координата касания. Как я могу проверить, пересекает ли перпендикулярный луч, который проходит через координаты экрана, одну из фигур, которые я отрисовал, и как определить, какая из них является?

(дополнительно: я делаю это внутри Maxst Ar SDK, мгновенный трекер)

У меня есть данные ниже (Maxst SDK держать ниже данных) визуализированных объектов, и у меня есть сенсорные координаты.

float[] localMvpMatrix = new float[16];
float [] projectionMatrix = new float[16];
float[] modelMatrix = new float[16];
float[] translation = new float[16];
float[] scale = new float[16];
float[] rotation = new float[16];
float[] transform = new float[16];

Редактировать: Как использовать GLU.gluUnProject () для достижения этого в android? Может кто-нибудь объяснить, что это за параметры и как использовать вывод этого метода (в Android)?

1 Ответ

0 голосов
/ 22 апреля 2020

как вариант. Не прямой ответ. Вы можете попытаться преобразовать координаты вершин объекта в пиксели экрана:

import android.opengl.GLU
// widthScreen and heightScreen values will be different for port and land orientation
private var view: IntArray = intArrayOf(0, 0, widthScreen, heightScreen)
private var windowCoordinates = FloatArray(3)
...
// modelX, modelY, modelZ - model coordinates of vertex
GLU.gluProject(modelX, modelY, modelZ, modelViewMatrix, 0, 
     projectionMatrix, 0, view, 0, windowCoordinates, 0)

// coordinates (pixels) of the screen
val x = coordinatesWindow[0]
val y = coordinatesWindow[1]

и сравнить положение ключевых вершин с координатами касания в двумерном пространстве.

Или чтобы получить координаты центра объекта:

GLU.gluProject(0.0f, 0.0f, 0.0f, modelViewMatrix, 0, projectionMatrix, 0, view, 0,
          windowCoordinates, 0)

И сравните касание относительно центра объекта. В этом случае необходимо учитывать расстояние до объекта.

...