【发布时间】:2019-02-28 16:22:38
【问题描述】:
到目前为止,我的 ARCore 项目非常一致地在图像上显示视频,但为了更深入地理解,我还希望能够融合 3D 对象和静止图像。所以说对于具有三个扫描图像点的海报,我想让一个播放视频,另一个显示一个立方体,第三个显示一个图像。 一种显示不同对象的多个可视化工具。我的问题是我似乎无法集成简单的多维数据集,我觉得这是因为:
-我的可视化对象是一个 Quad 并且涉及对象的放置
-没有正确调用我的立方体预制件,considering it is added to the visualizer prefab
-而且我似乎无法调用图像而不是视频,这是我在这里缺乏知识。
我的 AugmentedImageVisualizer 似乎非常适合视频播放:
public class AugmentedImageVisualizer : MonoBehaviour
[SerializeField] private VideoClip[] _videoClips;
public AugmentedImage Image;
public GameObject[] Models;
private VideoPlayer _videoPlayer;
void Start()
{
_videoPlayer = GetComponent<VideoPlayer>();
_videoPlayer.loopPointReached += OnStop;
}
private void OnStop(VideoPlayer source)
{
gameObject.SetActive(false);
}
void Update()
{
if (Image == null || Image.TrackingState != TrackingState.Tracking)
{
Models[Image.DatabaseIndex].SetActive(false);
return;
}
if (!_videoPlayer.isPlaying)
{
_videoPlayer.clip = _videoClips[Image.DatabaseIndex];
_videoPlayer.Play();
Models[Image.DatabaseIndex].SetActive(true);
}
transform.localScale = new Vector3(Image.ExtentX, Image.ExtentZ, 1);
}
AugmentedImageController 非常简单,但我没有编辑任何内容来适应添加 3D 对象:
public class AugmentedImageController : MonoBehaviour
[SerializeField] private AugmentedImageVisualizer _augmentedImageVisualizer;
private readonly Dictionary <int, AugmentedImageVisualizer> _visualizers =
new Dictionary <int, AugmentedImageVisualizer>();
private readonly List<AugmentedImage> _images =
new List<AugmentedImage>();
private void Update()
{
if (Session.Status != SessionStatus.Tracking)
{
return;
}
Session.GetTrackables(_images, TrackableQueryFilter.Updated);
VisualizeTrackables();
}
private void VisualizeTrackables()
{
foreach (var image in _images)
{
var visualizer = GetVisualizer(image);
if (image.TrackingState == TrackingState.Tracking && visualizer == null)
{
AddVisualizer(image);
}
else if (image.TrackingState == TrackingState.Stopped && visualizer != null)
{
RemoveVisualizer(image, visualizer);
}
}
}
private void AddVisualizer(AugmentedImage image)
{
var anchor = image.CreateAnchor(image.CenterPose);
var visualizer = Instantiate(_augmentedImageVisualizer, anchor.transform);
visualizer.Image = image;
_visualizers.Add(image.DatabaseIndex, visualizer);
}
private void RemoveVisualizer(AugmentedImage image, AugmentedImageVisualizer visualizer)
{
_visualizers.Remove(image.DatabaseIndex);
Destroy(visualizer.gameObject);
}
private AugmentedImageVisualizer GetVisualizer(AugmentedImage image)
{
AugmentedImageVisualizer visualizer;
_visualizers.TryGetValue(image.DatabaseIndex, out visualizer);
return visualizer;
}
想知道是否可以添加多个可视化工具,以便向其中添加新对象、视频和图像。 (就像视频已经在项目中的方式一样) Goal is to allow adding extra files to display on visualizer
我正在考虑一种方法,将 Visualizer 脚本设置为空,并调用一个四边形用于视频,一个空心添加 3D 对象,另一个四边形用于图像。但感觉这与我目前所拥有的有所不同。
不确定哪种路径可行,请使用一个 AugmentedImageVisualizer,或者是否有办法创建多个 Visualizer 来显示不同的对象。如何使其更加模块化,以显示其他媒体但仍保留添加和删除视频、对象和图像的功能并保留锚定顺序
【问题讨论】: