Расчет точки пересечения Ray и плоскости Scene2d UI - PullRequest
0 голосов
/ 10 ноября 2018

Я рендерил таблицу пользовательского интерфейса Scene2d в трехмерном мире, используя SpriteBatch, projection matrix и PerspectiveCamera

public void render (float delta) {
    spriteBatch.setProjectionMatrix(projectionMatrix.set(camera.combined).mul(transform));
    spriteBatch.begin();
    rootTable.draw(spriteBatch, 1.0f);
    spriteBatch.end();
}

render1 render2

Указатель мыши скрыт и зафиксирован в центре экрана. Когда вызывается событие touchUp, если мышь находится внутри ограничительной рамки таблицы, Я хочу вычислить позицию Vector2, в которой мышь фактически была нажата внутри таблицы, чтобы я мог вызвать функцию Table.hit чтобы получить нажал Actor. Также это правильный подход для рисования 2D меню в 3D мире.

Я использую этот код для проверки пересечения лучей.

Ray ray = camera.getPickRay(screenX, screenY);
int result = -1;
float distance = -1;

transform.getTranslation(position);

if (Intersector.intersectRayBoundsFast(ray, position, new Vector3(40, 40, 20) )) {
    Gdx.app.log("RAY", "Table Clicked");
}

Координаты Scene2d начинаются с нижнего левого угла, а в 3D они начинаются с центра. Я использовал new Vector3(40, 40, 20) в качестве фиктивных границ.

...