RaycastHit.textureCoord 值中的不连续性(正确获取纹理上的坐标)

本文关键字:纹理 获取 坐标 textureCoord 不连续性 RaycastHit | 更新日期: 2023-09-27 17:56:25

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

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

如果我没有很好地描述问题,我可以录制一个简短的截屏视频。

游戏对象是一个平面。

如果相关 mouseEvent 由 windows mouseHook 生成。(特定于应用程序的事情)

我做错了什么?

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

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

RaycastHit.textureCoord 值中的不连续性(正确获取纹理上的坐标)

所以这毕竟是缩放问题。其中一个标度值为负值,并导致此行为。