基于4点实例化
Instantiate based on 4 points
我正在zxing估计QR码的4个角点。以下是我估计角点的代码。
LuminanceSource source = new RGBLuminanceSource(barcodeBitmap,QRTexture.width, QRTexture.height);
var options = new DecodingOptions { PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.QR_CODE }, TryHarder = true };
this.reader = new BarcodeReader(null, null, ls => new GlobalHistogramBinarizer(ls)) { AutoRotate = false, TryInverted = false, Options = options };
Result result = this.reader.Decode(source);
这给了我一个结果点,它有 QR 码的四个角。如何根据这些角点的位置在二维码上叠加 3D 对象?
我不知道你用的是二维码 reader 但一般来说你基本上只需要 3 个点例如
A-------B
|
| X
|
C
X 是您要放置对象的位置
如此简单
// Assuming given values
Vector3 A; // top-left corner
Vector3 B; // top-right corner
Vector3 C; // bottom-left corner
GameObject obj;
var vectorAtoB = B - A;
var vectorAtoC = C - A;
obj.transform.position = A + vectorAtoB * 0.5f + vectorAtoC * 0.5f;
然后您还需要对象的方向。当然,这取决于您的需要,但最简单的方法是设置对象的 Transform.forward
and Transform.right
(设置两个轴就足够了,因为第三个轴会自动正确)
var vectorCtoA;
obj.transform.forward = vectorCtoA;
obj.transform.right = vectorAtoB;
如果您还需要比例尺,那么它会变得棘手 - 或者至少您还需要一个给定值:
// This is the expected QR code edge length
// if the QR code has exactly this size then the model will have scale 1,1,1
// otherwise it is scaled according to the QR code size
float normalSize;
var qrEdgeLength = vectorAtoB.magnitude;
obj.transform.localScale = Vector3.one * qrEdgeLength / normalSize;
我正在zxing估计QR码的4个角点。以下是我估计角点的代码。
LuminanceSource source = new RGBLuminanceSource(barcodeBitmap,QRTexture.width, QRTexture.height);
var options = new DecodingOptions { PossibleFormats = new List<BarcodeFormat> { BarcodeFormat.QR_CODE }, TryHarder = true };
this.reader = new BarcodeReader(null, null, ls => new GlobalHistogramBinarizer(ls)) { AutoRotate = false, TryInverted = false, Options = options };
Result result = this.reader.Decode(source);
这给了我一个结果点,它有 QR 码的四个角。如何根据这些角点的位置在二维码上叠加 3D 对象?
我不知道你用的是二维码 reader 但一般来说你基本上只需要 3 个点例如
A-------B
|
| X
|
C
X 是您要放置对象的位置
如此简单
// Assuming given values
Vector3 A; // top-left corner
Vector3 B; // top-right corner
Vector3 C; // bottom-left corner
GameObject obj;
var vectorAtoB = B - A;
var vectorAtoC = C - A;
obj.transform.position = A + vectorAtoB * 0.5f + vectorAtoC * 0.5f;
然后您还需要对象的方向。当然,这取决于您的需要,但最简单的方法是设置对象的 Transform.forward
and Transform.right
(设置两个轴就足够了,因为第三个轴会自动正确)
var vectorCtoA;
obj.transform.forward = vectorCtoA;
obj.transform.right = vectorAtoB;
如果您还需要比例尺,那么它会变得棘手 - 或者至少您还需要一个给定值:
// This is the expected QR code edge length
// if the QR code has exactly this size then the model will have scale 1,1,1
// otherwise it is scaled according to the QR code size
float normalSize;
var qrEdgeLength = vectorAtoB.magnitude;
obj.transform.localScale = Vector3.one * qrEdgeLength / normalSize;