我有一个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)。你知道为什么当目标丢失时对象会冻结吗?我正在为爱普生Moverio bt-300开发,并使用vuforia眼镜样本应用程序。
谢谢。
发布于 2017-07-13 19:55:07
我找到问题了。问题是如何获得正确的相机位置。因为我用的是眼镜,所以Camera.main.transform.position会给always (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));
}https://stackoverflow.com/questions/45068092
复制相似问题