2017-06-24 30 views
6

Próbuję zrozumieć różnicę między innym elementem wprowadzonym w ArKit i ich ekwiwalenty może w SceneKit:ARKit vs SceneKit współrzędne

  • SCNNode.simdTransform vs SCNNode.transform. W ARKit wydaje się, że ludzie używają SCNNode.simdTransform zamiast SCNNode.transform. Czym się różnią? Wydaje się, że simdTransform używa głównej kolejności kolumn, a transformacja (SCNMatrix4) jest wierszem głównym. Jak mogę przekonwertować jeden na drugi? Po prostu przetransponować? Mam wrażenie, że śledzenie nie działa tak dobrze, jeśli używam transform zamiast simdTransform. Czy to jest oczekiwane, czy tylko wrażenie? Jeśli ustawię jedną właściwość, co się stanie, jeśli ustawię drugą?

  • ARFrame.camera vs Scene.pointOfView: Patrząc na ich transformacje, wydają się być nieco inna:

.

// ARFrame.camera.transform (matrix_float4x4) 
-0.01 0.99 -0.11 0.02 
-0.99 0.00 0.11 0.06 
0.10 0.11 0.98 0.0 
0.0 0.0 0.0 1.0 

// sceneView.pointOfView.transform (SCNMatrix4) 
// or sceneView.pointOfView.simdTransform^T (matrix_float4x4) 
0.99 0  0.11 0 
0.01 0.99 -0.12 0 
-0.11 0.11 0.98 0 
0.03 0.6 0.0 0.99 

Czy są takie same minus jeden obrót?

+1

_ "Mam wrażenie, że śledzenie nie działa tak dobrze, jeśli używam transformacji zamiast simdTransform. Czy to jest oczekiwane, czy tylko wrażenie?" _ ;-) Tylko Ty możesz stwierdzić, czy to było tylko twoje wrażenie lub że miałeś mocne dowody, np widząc dzienniki Xcode stwierdzające _ [Technika] Na wydajność śledzenia świata wpływają ograniczenia zasobów_ Powiedz nam, czy to było ostatnie, byłoby bardzo interesujące. – PDK

Odpowiedz

4

Zarówno SceneKit, jak i ARKit zawierają symbole zdefiniowane jako typy SIMD. Ponieważ ARKit importuje SceneKit, symbole SIMD zdefiniowane w SceneKit są dostępne dla obu. Typy SIMD umożliwiają równoległe obliczenia, więc ich użycie może poprawić wydajność logiki aktualizacji aplikacji. Jak już zauważyłeś, nie zawsze istnieje wygodny sposób na konwersję pomiędzy typem SIMD a starszym odpowiednikiem SceneKit lub Core Graphics, dzięki czemu zazwyczaj otrzymujesz czystszy kod, konsekwentnie używając SIMD tam, gdzie to możliwe.

Aktualizacja każdej właściwości wpływającej na transformację węzła aktualizuje również inne właściwości transformacji. Dotyczy to również współrzędnych lokalnych i światowych.

Właściwość camera z opisuje kamerę sprzętową urządzenia, a nie wirtualną kamerę używaną do renderowania sceny. Chociaż spodziewałbym się bliskiej korespondencji, domyślam się, że odpytujesz instancję ARCamera, zanim instancja SCNCamera została zaktualizowana podczas pętli renderowania. Jeśli możesz, zalecamy kierowanie tych aktualizacji za pomocą odpowiednich metod delegowania, ponieważ wiesz, że odpowiednie dane są aktualne.

+1

Dobre podsumowanie. Zobacz także [tę odpowiedź] (https://stackoverflow.com/a/45182794/957768), aby uzyskać więcej informacji na temat pozycjonowania 'ARAnchor' vs.' SCNNode'. – rickster