如何使图像识别后出现的东西保持不变? (unity3d vuforia)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使图像识别后出现的东西保持不变? (unity3d vuforia)相关的知识,希望对你有一定的参考价值。

你好我正在开发一个Vuforia AR图像识别应用程序。

但是,我希望在扫描图像时出现一个物体,并且该图像保持不被附着(不受扫描图像的位置影响并且在相机中具有固定坐标)到被识别的图像。

我怎样才能做到这一点?

这是通过脚本完成的吗?如果是这样,我怎么编写脚本?我将在哪里添加脚本组件?

到目前为止我尝试过的是

刚跟着this video 但使用了不同的目标和对象

我只是想让识别后出现的物体不被附着

先感谢您。

答案

我不知道你是否仍然关注这篇文章。

这是你的答案:

我怎样才能做到这一点?

通过将3D模型传输到相机。

这是通过脚本完成的吗?

是。

如果是这样,我怎么编写脚本?

首先,你需要知道你想要什么样的“棒”。是否有触发按钮,或者当相机远离标记时它会粘住?

如果有一个触发按钮,您可以编写脚本,例如当您单击/点击按钮时,它会将3D(GameObject)父级更改为相机。

my3D.transform.SetParent(Camera.main.transform);

如果你想这样做,当你移动你的相机,3D模型自动粘在相机上,它会稍微复杂一点。您需要访问VuforiaImageTarget对象中的ImageTargetTrackableEventHandler.cs。寻找一个名为OnTrackingLost()的函数。代替 :

    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);

    // Disable rendering:
    foreach (Renderer component in rendererComponents)
    {
        component.enabled = false;
    }

    // Disable colliders:
    foreach (Collider component in colliderComponents)
    {
        component.enabled = false;
    }

您通过禁用它来删除整个代码块,并在脚本之上添加

[SerializeField]
GameObject my3D;

在OnTrackingLost()函数内部,输入以下代码:

my3D.transform.SetParent(Camera.main.transform);

之后,转到Inspector视图,单击ImageTarget,会出现这样的情况:

enter image description here

只需将3D从“层次结构”视图拖动到显示的变量图像即可。

我将在哪里添加脚本组件?

如果你正在使用“按钮”方法,只需创建一个空的游戏对象并将脚本附加到它。

希望它有所帮助,因为对于vuforia的支持非常有限。 :)

另一答案

对我来说唯一有用的是在脚本的开头添加一个布尔变量,并使其在OnTrackingLost()进入时,布尔值变为true。我不知道自己是否解释过。

首先你在开头创建:

private bool bol = false;

然后在功能上:

private void OnTrackingLost()
{

    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
    if (!bol) {
        // Disable rendering:
        foreach (Renderer component in rendererComponents)
        {
            component.enabled = false;
        }

        // Disable colliders:
        foreach (Collider component in colliderComponents)
        {
            component.enabled = false;
        }
        bol = true;
    }


    Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}

以上是关于如何使图像识别后出现的东西保持不变? (unity3d vuforia)的主要内容,如果未能解决你的问题,请参考以下文章

在进行小鼠插补并保存结果后,如何使缺失值保持不变?

CSS/HTML 使文本相对于图像大小保持不变?

从角度 8 的导航栏中选择一个选项后,如何使侧面导航保持不变并且内容单独消失?

如何使 DRF ( Django-REST-Framework) 令牌保持不变,使其在每次页面刷新后不会丢失?

使按钮的背景颜色在单击后更改并保持不变

Unity UGUI 自适应的个人理解