#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, это работает нормально. Спасибо