2017-07-12 3 views
0

J'ai un modèle 3D attaché à une cible d'image. Ce que je veux, c'est redimensionner le modèle en fonction de la position de la caméra, c'est-à-dire que lorsque je me rapproche du modèle, je veux qu'il s'agrandisse et quand je m'éloigne, il devrait être plus petit. Je cherchai les forums et essayé deux solutions différentes: Solution 1: Je créé un script et attaché au modèle 3D:Appliquer l'échelle/la traduction après la perte de la cible d'image 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); 
    } 
} 

Solution 2:

public class AR_Capsule : MonoBehaviour { 

    public float speed = 10f; 

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

Les deux solutions fonctionnent lorsque la La cible de l'image est visible. Mais quand je perds la cible, l'objet reste immobile et la position de la caméra est toujours (0.0, 0.0, 0.0). Avez-vous une idée de la raison pour laquelle l'objet se fige lorsque la cible est perdue? Je suis en train de développer pour Epson Moverio bt-300 et de travailler avec l'application exemple de lunettes vuforia.

Merci.

Répondre

0

J'ai trouvé le problème. Le problème consiste à obtenir la bonne position de la caméra. Depuis que j'utilise une lunette Camera.main.transform.position donnera toujours (0,0,0). Au lieu de cela, j'ai utilisé Camera.main.transform.GetChild(1).transform.position qui fonctionne bien. Voici le code de fonctionnement:

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)); 
}