Google ARCore - получить значение вращения сгенерированной плоскости для Unity? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть приложение, которое обнаруживает вертикальные поверхности. Теперь, когда вертикальная поверхность обнаружена, ARCore отображает сетку плоскости поверхности в соответствии с перспективой вертикальной поверхности.

То, что я пытаюсь сделать, это получить вращение сетки плоской поверхности, потому что, если я сканирую поверхность, глядя на нее (слева), моя конкретизированная модель на стене указывает в правильном направлении. Если я сканирую поверхность с другой стороны (справа) и создаю экземпляр модели, то модель переворачивается на 180 градусов.

Моя идея состояла в том, чтобы проверить, что такое вращение, и если оно достигает порогового значения, затем добавить смещение к модели, прежде чем она его создаст.

if (touch.phase == TouchPhase.Began)
        {
            Debug.Log("Touch Began");
            if (Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out hit))
            {
                if (CurrentNumberOfGameObjects < numberOfGameObjectsAllowed)
                {

                    Instructions.SetActive(true);
                    Debug.Log("Screen Touched");
                    Destroy(ARObject);
                    // Use hit pose and camera pose to check if hittest is from the
                    // back of the plane, if it is, no need to create the anchor.
                    if ((hit.Trackable is DetectedPlane) &&
                        Vector3.Dot(FirstPersonCamera.transform.position - hit.Pose.position,
                            hit.Pose.rotation * Vector3.up) < 0)
                    {
                        Debug.Log("Hit at back of the current DetectedPlane");
                    }
                    else
                    {
                        ARObject = Instantiate(ARAndroidPrefab, hit.Pose.position, hit.Pose.rotation);// Instantiate Andy model at the hit pose.                                                                                 
                        ARObject.transform.Rotate(x_ModelRotation, k_ModelRotation, z_ModelRotation, Space.Self);// Compensate for the hitPose rotation facing away from the raycast (i.e. camera).
                        demoscript.quad.transform.Rotate(x_ModelRotation, k_ModelRotation, z_ModelRotation, Space.Self);
                        //var anchor = hit.Trackable.CreateAnchor(hit.Pose);
                        anchor = hit.Trackable.CreateAnchor(hit.Pose);
                        ARObject.transform.parent = anchor.transform;
                        CurrentNumberOfGameObjects = CurrentNumberOfGameObjects + 1;

                        // Hide Plane once ARObject is Instantiated 
                        foreach (GameObject Temp in DetectedPlaneGenerator.instance.PLANES) //RK
                        {
                            Temp.SetActive(false);
                        }
                    }
                }
            }
        }

Это часть кода, которая создает префаб единства.

 x_ModelRotation is 0.0f;
 z_ModelRotation is 0.0f;

Я пытался проверить вращение Позы и вывести значения для отладки текста, но я всегда получаю значения 0,0,0,0 для сгенерированных плоскостей.

Есть мысли о том, как я могу получить вращение сетки вертикальной поверхности?

...