В последнее время я начал использовать 8th Wall, но я еще не создал свой собственный проект (просто поиграл с демонстрационными и проверил исходный код), поэтому я не знаю на 100%, будет ли это работать, но здесь идет:
Если вы посмотрите файл 8th Wall XRDataTypes.cs
, вы можете найти типы данных XRDetectionTexture
, XRDetectionImage
и XRDetectedImageTarget
. Каждый из этих типов данных имеет несколько экземпляров размерных полей.
XRDetectionTexture:
/**
* A unity Texture2D that can be used as a source for image-target detection.
*/
[Serializable] public struct XRDetectionTexture {
[...]
/**
* The expected physical width of the image-target, in meters.
*/
public float widthInMeters;
[...]
}
XRDetectionImage:
/**
* Source image data for a image-target to detect. This can either be constructed manually, or
* from a Unity Texture2d.
*/
public struct XRDetectionImage {
/**
* The width of the source binary image-target, in pixels.
*/
public readonly int widthInPixels;
/**
* The height of the source binary image-target, in pixels.
*/
public readonly int heightInPixels;
/**
* The expected physical width of the image-target, in meters.
*/
public readonly float targetWidthInMeters;
[...]
}
}
XRDetectedImageTarget:
/**
* An image-target that was detected by an AR Engine.
*/
public struct XRDetectedImageTarget {
[...]
/**
* Width of the detected image-target, in unity units.
*/
public readonly float width;
/**
* Height of the detected image-target, in unity units.
*/
public readonly float height;
[...]
}
Не сделав этого сам, я не могу дать вам работающий пример кода, но документация 8th Wall по основам обнаружения изображений кажется довольно приличной и справляется с факт указывает на то, что экземпляр XRDetectedImageTarget
передается в метод обратного вызова, указанный для обнаруженной модели (изображение скопировано из документации 8-й стены, 2019-01-18):
Так что, если вы знаете, какое отношение модели к изображению вы хотите (то есть «ширина модели должна быть вдвое меньше ширины обнаруженного изображения»), то в обратном вызове вы сможете сделать что-то вроде :
//calculating the size ratio might be more difficult than this, assume this is pseudocode
var sizeRatio = xrDetectedImageTarget.width / xrDetectionImage.targetWidthInMeters;
var placedModel = Instantiate(prefabModel, newPosition, newRotation, parentTransform);
placedModel.transform.localScale = this.transform.localScale * sizeRatio;
Надеюсь, что работает / помогает!