Я рендерил таблицу пользовательского интерфейса 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();
}
Указатель мыши скрыт и зафиксирован в центре экрана. Когда вызывается событие 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)
в качестве фиктивных границ.