2

我正在 c# Unity3D 中尝试以下操作。

我想解码一个二维码,如果识别成功,然后在二维码周围画一个绿色方块。正方形必须使用下面的解码文本来跟踪真实对象。目前我能够以这种方式解码 QR 。

ScanQRCodeVuforia是 vuforia 扫描二维码/条形码的文件。

使用下面的代码,我能够在屏幕上检测到 Debug.DrawLine 的 X 和 Y,但发生的情况是该线与相机平行,而不是在屏幕上。只是给你一个想法。你知道我怎样才能在画布上表示线条吗?你知道我可以用来在 qr 周围画一个绿色框的其他方法吗?

ResultPoint[] point = result.ResultPoints;
Debug.Log("X: " + point[0].X + " Y: " + point[1].Y);
Debug.DrawLine(new Vector3(point[0].X, 0), new Vector3(point[0].Y, 0), Color.green, 1000000000f);

我认为这是一个很好的参考,可以用来检测 QR 的四个角度点。

谢谢。


更新!

使用下面的代码,我可以在画布上画线,但它不会与图像对齐。这张图片给出了一个更好的主意

var rayX = Camera.main.ScreenPointToRay(new Vector3(point[0].X, point[1].Y));
var rayY = Camera.main.ScreenPointToRay(new Vector3(point[1].Y, point[0].X));
Debug.DrawLine(rayX.origin, rayY.origin, Color.green, 1000000000f);
4

1 回答 1

1

首先,您不应该使用 Debug.DrawLine 来实际绘制一条线。它仅用于调试目的。要以正确的方式执行此操作,请使用LineRenderer

由于您似乎对计算机图形学没有太多经验,所以我将给您一个简单的解释:

您想要实现的基本上是可视化对象的边界框。根据其他一些问题,ResultPoint-Array 包含 3 个点:Bottom-Left、Top-Left 和 Top-Right。计算右下角是微不足道的,之后在点之间简单地画线。例如:

ResultPoint[] boundingBoxPoints = result.ResultPoints;
Debug.DrawLine(boundingBoxPoints[0], boundingBoxPoints[1], Color.green, 100f);

等等。

于 2020-05-28T01:32:13.807 回答