在图像目标丢失后应用缩放/翻译Vuforia Unity

时间:2017-07-12 21:51:31

标签: unity3d scale translate vuforia epson

我有一个3D模型附加到图像目标。我想要的是根据相机的位置缩放模型,即当我靠近模型时我希望它变得更大,当我走得更远时,它应该变得更小。我搜索了论坛并尝试了两种不同的解决方案: 解决方案1: 我创建了一个脚本并附加到3d模型:

public class AR_Capsule : MonoBehaviour {

    float minimumDistance = 0;
    float maximumDistance = 3;
    float minimumDistanceScale = 0.3f;
    float maximumDistanceScale = 0.1f;  

    void Update()
    {
        float distance = (transform.position - Camera.main.transform.position).magnitude;

        float norm = (distance - minimumDistance) / (maximumDistance - minimumDistance);

        norm = Mathf.Clamp01(norm);

        Vector3 minScale = Vector3.one * maximumDistanceScale;
        Vector3 maxScale = Vector3.one * minimumDistanceScale;

        transform.localScale = Vector3.Lerp(maxScale, minScale, norm);
    }
}

解决方案2:

public class AR_Capsule : MonoBehaviour {

    public float speed = 10f;

    void Update()
    {
        transform.Translate(0, 0,(-1 * Input.acceleration.z * speed * Time.deltaTime));
    }
}

当图像目标可见时,两种解决方案都有效。但是当我从视线中丢失目标时,物体保持静止,相机位置始终为(0.0,0.0,0.0)。 你知道为什么当目标丢失时对象会冻结吗? 我正在为Epson Moverio bt-300开发并使用vuforia眼镜样品应用程序。

感谢。

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。问题是获得正确的相机位置。由于我使用的是眼镜Camera.main.transform.position,因此始终会(0,0,0)。相反,我使用Camera.main.transform.GetChild(1).transform.position工作正常。以下是工作代码:

initialDist = Vector3.Distance(transform.position, Camera.main.transform.GetChild(1).transform.position);

distance = Vector3.Distance(lastMarkerpos, Camera.main.transform.GetChild(1).transform.position);

if((transform.localScale.x * (initialDist / distance)) > 0.05 && (transform.localScale.x * (initialDist / distance)) < 2)
{
    transform.localScale = new Vector3(transform.localScale.x * (initialDist / distance), transform.localScale.y * (initialDist / distance), transform.localScale.z * (initialDist / distance));
}