Microsoft Scene Understanding SDK 및 hololens2를 사용하여 Unity Scene을 플레이어의 실제 공간에 맞추려면 어떻게해야합니까? [닫은]
플레이어가 Hololens2의 Unity 씬에로드되면 Unity 플로어 평면이 실제 플로어와 일치하지 않습니다. hololens2 및 MRTK를 사용하면 Unity 장면 원점이 0,0,0 인 플레이어 헤드에 고정됩니다.
Microsoft Scene Understanding SDK를 사용하여 Unity Scene 환경 Y 위치를 실제 방의 바닥으로 설정하려고합니다. 현재 바닥 장면 개체에 액세스 할 수 있지만 SpatialCoordinateSystem 부분을 수행하려고 할 때 .ToUnity () 메서드를 사용하여 4x4 매트릭스를 변환 할 수 없습니다. vector3 .ToUnity () 호출을 .ToUnityVector3 ();로 변경해야했습니다. 그러나 매트릭스에 대한 유사한 방법을 찾을 수 없습니다.
이 문서에 언급 된 .ToUnity () 메서드는 더 이상 사용되지 않습니까? 뭔가에 대한 참조가 누락 되었습니까? (참조 이미지 참조)
이 특정 문제 또는 Hololens2 사용자의 물리적 환경에 일치하는 장면을 조정하는 전반적인 과제에 대한 지원에 크게 감사드립니다.
여기에 제공된 정보를 따르고 있습니다. https://docs.microsoft.com/en-us/windows/mixed-reality/develop/platform-capabilities-and-apis/scene-understanding-sdk



답변
문서 와 비교할 때 Value
속성 을 놓치고 ToUnity()
sceneToWorld 객체에서 직접 메서드를 호출했습니다 . 이것이 문제의 원인 일 수 있습니다.
var sceneToWorldUnity = sceneToWorld.ToUnity();
=>
var sceneToWorldUnity = sceneToWorld.Value.ToUnity();
Hernando-MSFT의 제안이 누락 된 ToUnity () 참조에 도움이되었습니다. 모든 장면 홀로그램을 바닥에 정렬하는 문제는 여전히 남아 있지만 진행 중입니다! Hernando 정말 감사합니다!
기본적으로 .value를 추가하여 행렬 데이터에 액세스 한 다음이 네임 스페이스를 구현해야했습니다.
namespace NumericsConversion
{
public static class NumericsConversionExtensions
{
public static UnityEngine.Vector3 ToUnity(this System.Numerics.Vector3 v) => new UnityEngine.Vector3(v.X, v.Y, -v.Z);
public static UnityEngine.Quaternion ToUnity(this System.Numerics.Quaternion q) => new UnityEngine.Quaternion(-q.X, -q.Y, q.Z, q.W);
public static UnityEngine.Matrix4x4 ToUnity(this System.Numerics.Matrix4x4 m) => new UnityEngine.Matrix4x4(
new Vector4(m.M11, m.M12, -m.M13, m.M14),
new Vector4(m.M21, m.M22, -m.M23, m.M24),
new Vector4(-m.M31, -m.M32, m.M33, -m.M34),
new Vector4(m.M41, m.M42, -m.M43, m.M44));
public static System.Numerics.Vector3 ToSystem(this UnityEngine.Vector3 v) => new System.Numerics.Vector3(v.x, v.y, -v.z);
public static System.Numerics.Quaternion ToSystem(this UnityEngine.Quaternion q) => new System.Numerics.Quaternion(-q.x, -q.y, q.z, q.w);
public static System.Numerics.Matrix4x4 ToSystem(this UnityEngine.Matrix4x4 m) => new System.Numerics.Matrix4x4(
m.m00, m.m10, -m.m20, m.m30,
m.m01, m.m11, -m.m21, m.m31,
-m.m02, -m.m12, m.m22, -m.m32,
m.m03, m.m13, -m.m23, m.m33);
}
}
또한 공간 데이터 플로어의 Y 값을 결정하기 위해 런타임에 강체와 충돌체가있는 큐브를 떨어 뜨려 보았습니다. 이것은 실제로 비교적 잘 작동하는 것처럼 보이지만 확실히 가장 정확한 솔루션은 아닙니다.