【问题标题】:Discontinuity in RaycastHit.textureCoord values (getting coordinates on texture right)RaycastHit.textureCoord 值的不连续性(获取正确的纹理坐标)
【发布时间】:2015-06-16 12:32:11
【问题描述】:

您好,我正在尝试获取纹理上的特定坐标(在鼠标光标下)。所以在我正在执行的鼠标事件中:

Ray outRay = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit clickRayHit = new RaycastHit();

if (!Physics.Raycast(outRay, out clickRayHit))
{
    return;
}

Vector2 textureCoordinate = clickRayHit.textureCoord;

Texture2D objectTexture = gameObject.GetComponent<Renderer>().material.mainTexture as Texture2D;

int xCord = (int)(objectTexture.width * textureCoordinate.x);
int yCord = (int)(objectTexture.height * textureCoordinate.y);

但问题是我得到的坐标不是精确地在光标下,而是“有点接近它”。坐标并不是一直以一种方式移动,但移动也不是随机的。它们在纹理的不同点上移动不同,但是: 他们仍然在真实光标区域的某个地方 当光标在同一点上方时,坐标以相同的方式移动。

这是坐标日志的一部分:http://pastebin.ca/3029357

如果我对问题的描述不够好,我可以录制一个简短的截屏视频。

GameObject 是一个平面。

如果是相关的mouseEvent是windows mouseHook产生的。 (应用特定的东西)

我做错了什么?

UPD:我决定录制截屏视频 - https://youtu.be/LC71dAr_tCM?t=42。在这里,您可以通过我的应用程序看到 Paint 窗口图像。在左下角,您可以看到 Paint 正在显示鼠标的坐标(我以我之前描述的方式获取此坐标 - 纹理上点的位置)。所以当我移动鼠标光标时,你可以看到坐标是如何变化的。

UPD2:
我只想再强调一次,这种转变不是恒定的或线性的。鼠标坐标周围可能有“跳跃”(但不仅仅是跳跃)。上面的视频解释得更好。

【问题讨论】:

  • 鼠标坐标日志对我们任何人都没有帮助。如果您在编辑器中说出您的 Canvas 设置,它会有所帮助:它是恒定像素大小还是随屏幕大小缩放?大多数这些问题都可以通过校正比例来解决。尝试使用 Debug.Log 写入 objectTexture.width 、 textureCoordinate.x 、 objectTexture.height 、 textureCoordinate.y 的值
  • 我这里没有使用 Canvas。只是一个标准的 3d 对象 - 上面有纹理的平面。 objectTexture.height/width 在整个程序执行过程中保持不变。 textureCoordinate 的值发生跳跃
  • 抱歉,我读到:“GameObject 是一个面板。”我的错。您的 3D 对象是否在任意轴上缩放?
  • 是的,它在 x 和 z 轴上缩放。
  • 尝试以 1 的比例运行它,你会发现这是否是问题所在。如果是,则必须将 textureCoordinate 与对象比例相乘。

标签: c# unity3d textures coordinates


【解决方案1】:

所以这毕竟是缩放问题。其中一个比例值为负数,导致了这种行为。

【讨论】:

    猜你喜欢
    • 2020-07-12
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多