【问题标题】:ARCore Visualizing video, image and 3D objectARCore 可视化视频、图像和 3D 对象
【发布时间】: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;
}

This is my visualizer object, which might cause the restrictions for adding varied media, but I can't seem to make sense of how to modify it.

想知道是否可以添加多个可视化工具,以便向其中添加新对象、视频和图像。 (就像视频已经在项目中的方式一样) Goal is to allow adding extra files to display on visualizer

我正在考虑一种方法,将 Visualizer 脚本设置为空,并调用一个四边形用于视频,一个空心添加 3D 对象,另一个四边形用于图像。但感觉这与我目前所拥有的有所不同。

不确定哪种路径可行,请使用一个 AugmentedImageVisualizer,或者是否有办法创建多个 Visualizer 来显示不同的对象。如何使其更加模块化,以显示其他媒体但仍保留添加和删除视频、对象和图像的功能并保留锚定顺序

【问题讨论】:

    标签: c# android unity3d arcore


    【解决方案1】:

    我假设您正在将资产中的预制件设置到 AugmentedImageVisualizer 类中,您是否尝试过实例化它们?

    默认的 ARCore augmented 不会从资产中分配预制件,脚本位于带有 3D 对象的预制件中。

    同时尝试移动图像中心的对象,因为您可能会将对象投射到远离您的视野的地方。

    对不起我的英语。

    例子:

    将此放在模型中每个项目的起始空白处。

    GameObject.Instantiate(Models[Image.DatabaseIndex], Image.CenterPose.position, new Quaternion());
    

    【讨论】:

    • 在这个阶段,我在预制件中拥有自己的 Cube,那里没有代码。但是我是从 Visualizer 的预制件中调用它的,所以现在当扫描图像时,它在技术上应该将立方体放在上面,但是会出现一个空白的 Quad(这是我的视频预制件支架,所以它也很有意义)。我想知道我是否可以替换该对象,也许这可以工作?不确定这是否会破坏逻辑。
    • 这是否意味着我需要在 Cube 预制件中创建一个需要实例化的脚本?如果是这样,你如何在 Visualizer 中调用它,我假设它仍然需要在那里调用,但我真的不确定。
    • 所以你在可视化器中有视频预制件和一个带有立方体的预制件?您可以尝试将所有内容放在同一个预制件中,然后根据设备检测到的图像激活和停用您想要的对象。
    猜你喜欢
    • 1970-01-01
    • 2019-03-15
    • 2019-11-05
    • 1970-01-01
    • 2022-04-28
    • 2021-04-09
    • 2020-12-14
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多