【问题标题】:When image size change, how do you calculate to counter the real-size coordinate value?当图像尺寸发生变化时,如何计算以抵消真实尺寸的坐标值?
【发布时间】:2019-08-16 08:28:24
【问题描述】:

我想知道图像从中心拉伸时的坐标值。

我知道纹理图像中的一个像素坐标,我通过将其与移动屏幕匹配来使用光线投射。

但是不知道图片长大后坐标值如何变化。

当图像变大时,如何计算来对抗真实尺寸的坐标值?

图像将增加到 1.33f 大小。

【问题讨论】:

  • real size coordinates 在什么地方?屏幕空间像素/厘米? WorldSpace 3d 坐标?
  • @derHugo 实际尺寸坐标为屏幕空间像素

标签: c# image unity3d coordinates


【解决方案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));
}

或者使用Vector2Vector2Int 中的方法你也许可以做到这一点:

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

两者都假设您的规模在xy 中是同质的。如果您希望它能够灵活地在不同轴上缩放,您可以提供一个缩放矢量。

【讨论】:

  • 感谢您的回答。 ImgCenter 是更大的图像吗?还是原图?
  • 我认为,var x = imgCenter.x + (touch.x - imgCenter.x) * scale,这工作正常。谢谢
猜你喜欢
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多