У меня есть приложение, которое обнаруживает вертикальные поверхности. Теперь, когда вертикальная поверхность обнаружена, 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 для сгенерированных плоскостей.
Есть мысли о том, как я могу получить вращение сетки вертикальной поверхности?