2017-07-12 74 views
0

我有一個3D模型附加到圖像目標。我想要的是根據相機的位置來縮放模型,也就是說,當我接近模型時,我希望它變大,當我變得更遠時,它應該變小。我搜索了論壇,並嘗試了兩種不同的解決方案: 解決方案1: 我創建了一個腳本,並連接到3D模型:圖像目標丟失後應用比例/翻譯Vuforia Unity

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眼鏡示例應用程序一起工作。

謝謝。

回答

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)); 
} 
相關問題