При изменении размера изображения, как вы вычисляете, чтобы противостоять значению координаты реального размера?

#c# #image #unity3d #coordinates

#c# #изображение #unity-игровой движок #координаты

Вопрос:

Я хочу знать значение координат, когда изображение растягивается от центра.

Я знаю одну пиксельную координату в текстурном изображении, и я использую ray cast, сопоставляя ее с экраном мобильного устройства.

Но я не знаю, как изменяется значение координаты при увеличении изображения.

введите описание изображения здесь

Когда изображения растут, как вы вычисляете, чтобы противостоять значению координаты реального размера?

Изображение увеличится до размера 1,33f.

введите описание изображения здесь

Комментарии:

1. real size coordinates в чем? Пиксели / сантиметры экранного пространства? Трехмерные координаты мирового пространства?

2. @derHugo координата реального размера — это пиксель экранного пространства

Ответ №1:

В Unity3D могут быть более простые способы — у меня нет никакого опыта в этом — но это звучит как довольно простая проблема масштабирования.

Вам нужно знать следующее:

  • Координаты центра изображения
    Это вектор (width/2, height/2)
  • Экранные координаты центра изображения
    , где центр изображения находится на экране
  • Коэффициент масштабирования ( 1.33f в этом примере)

Учитывая вышесказанное, вы можете вычислить пиксель, к которому прикасаются, используя простую математику:

 public Vector2Int ScaleTouch(Vector2Int imgCentre, Vector2Int dispCentre, float scale, Vector2Int touch)
{
    var x = imgCentre.x   (touch.x - dispCentre.x) * scale;
    var y = imgCentre.y   (touch.y - dispCentre.y) * scale;
    return Vector2Int.RoundToInt(new Vector2(x, y));
}
  

Или используя методы в Vector2 и Vector2Int , вы могли бы это сделать:

 public Vector2Int ScaleTouch(Vector2Int imgCentre, Vector2Int dispCentre, float scale, Vector2Int touch)
{
    var offset = Vector2.Scale(touch - dispCentre, new Vector2(scale, scale));
    return offset   imgCentre;
}
  

Оба предполагают, что ваш масштаб однороден по x и y . Вы могли бы предоставить масштабный вектор, если хотите, чтобы он был гибким в отношении масштабирования по разным осям.

Комментарии:

1. Спасибо за ответ. Является ли ImgCenter увеличенным изображением? Или это исходное изображение?

2. Я думаю, var x = imgCenter.x (touch.x — imgCenter.x) * scale, это работает нормально. Спасибо