Я не могу найти ответ на этот недавний, а не объективный c. Я использую SceneKit с быстрым и Im, пытаясь переместить мой персональный узел туда, где пользователь нажимает. Ive попытался использовать результат хита в касаниях, но мой узел на полу находится в (0, 0, 0), поэтому бесполезно, когда он попадает на то, что будет в большинстве случаев, когда пользователь нажимает на экран. Я собирался вытащить свою старую книгу исчисления, но потом я понял, что понятия не имею, как конвертировать, когда местоположение касания всегда относительно позиции экрана, которая движется вокруг сцены. Если бы кто-нибудь мог показать мне ссылку или дать совет, я был бы признателен.В SceneKit с быстрой попыткой перемещения персонажа прикосновением
0
A
ответ
0
Для преобразования между координатами представления и сцены вы можете использовать методы projectPoint и unprojectPoint рендера сцены, обратитесь к документации на https://developer.apple.com/reference/scenekit/scnscenerenderer
Они позволят вам превратить баллы в любом случае между 3D системы вашей сцены и координатой 2D система зрения отображаются в координату.
обновления
то, что вы хотите сделать, это вызвать unproject функции дважды, один раз с z, установленным в ноль (с координатами представления x/y), и один раз с ним устанавливается один. Это даст вам 2 очка в 3D-мире, представьте себе линию между ними, и вам нужно будет выяснить, где эта линия пересекает вашу плоскость пола. Это будет то, что вам нужно.
Спасибо, я вижу документацию сейчас. Я все еще запутался, почему аргумент SCNVector3? Я пытаюсь перейти из CGPoint, который я получаю от касаний, начал SCNVector3. – anthony
fun unprojectPoint (SCNVector3) – anthony
Это потому, что точка на экране переходит к строке в 3D-мире, вы устанавливаете значение от 0 до 1, чтобы указать, где вдоль линии в 3D-мире должна быть точка (между ближними и далеко отсекающие плоскости). Подробную информацию см. В документации, и вы можете задать более конкретный вопрос о переполнении стека, если вам нужна помощь с кодом. Если мой ответ помог, пожалуйста, отметьте его как принято, спасибо :) – simonWasHere