Есть ли способ стабилизировать трехмерный объект на дополненном изображении - PullRequest
0 голосов
/ 31 января 2019

Я настраиваю сцену и мне нужно, чтобы мой объект появлялся в одном углу увеличенного изображения.

Я создал скрипт, чтобы найти увеличенное изображение и установить его в качестве якоря.domPrefab создается на позиции якорей

            if (image.TrackingState == TrackingState.Tracking && visualizer == null)
            {
                //First: detect the augmented image

                Anchor imageAnchor = image.CreateAnchor(image.CenterPose);
                visualizer = Instantiate(AugmentedImageVisualizerPrefab, imageAnchor.transform, imageAnchor);
                visualizer.Image = image;
                m_Visualizers.Add(image.DatabaseIndex, visualizer);

                //Second: Instantiate the prefabs

            GameObject prefab = domPrefab;
            var domObject = Instantiate(prefab, anchor.transform.position, anchor.transform.rotation);
            domObject.transform.Rotate(0, k_ModelRotation, 0, Space.Self);
            domObject.transform.SetParent(anchor.transform, true);
            }

Я ожидаю, что domPrefab будет создан в центре расширенного изображения, и когда я научусь размещать его в углу, появится domPrefab.в углу изображения.

Фактический результат: domPrefab появляется в середине изображения, но он не стабилен.Когда камера смотрит вокруг, она немного перемещается, и ее масштаб меняется.

1 Ответ

0 голосов
/ 31 января 2019

Поскольку вы создаете якорь в центре изображения с этой линией

Anchor imageAnchor = image.CreateAnchor(image.CenterPose);

Затем создайте экземпляр визуализатора в положении imageAnchor и затем попытайтесь повернуть движение или что-то ещено вместо этого вы можете сделать это в вашем AugmentedImageVisualizer.Для этого

  1. Создайте пустой объект и присоедините к нему скрипт AugmentedImageVisualizer.
  2. Создайте public GameObject myModel в AugmentedImageVisualizer
  3. Поместите вашу модель какребенок к этому объекту и перетащите его в myModel в инспекторе.
  4. Создайте префаб с этим объектом
  5. Измените свой AugmentedImageVisualizer следующим образом:

    public AugmentedImage Image;
    public GameObject myModel;
    
    public void Update()
    {
    
        float halfWidth = Image.ExtentX / 2;
        float halfHeight = Image.ExtentZ / 2;
    
        // for upper left
        myModel.transform.localPosition = (halfWidth * Vector3.left) + (halfHeight * Vector3.back);
        //for upper right
        myModel.transform.localPosition = (halfWidth * Vector3.right) + (halfHeight * Vector3.back);
        //for lower left
        myModel.transform.localPosition = (halfWidth * Vector3.left) + (halfHeight * Vector3.forward);
        //for lower right
        myModel.transform.localPosition = (halfWidth * Vector3.right) + (halfHeight * Vector3.forward);
    
    }
    
  6. Используйте это как AugmentedImageVisualizer в вашем AugmentedImageExampleController

Если вы хотите, чтобы оно было стабильным и не меняло положение во времени, сделайтеоперация на пятом шаге в Start вместо Update или в другой функции и убедитесь, что она выполняется только один раз .

Надеюсь, это поможет Удачи!

...