Как расположить SCNCamera так, чтобы объект «просто помещался» в поле зрения?IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Как расположить SCNCamera так, чтобы объект «просто помещался» в поле зрения?

Сообщение Anonymous »

Я делаю настольную 3D-игру с помощью SceneKit. Сама доска плоская, но фигуры на ней 3D. Я хочу расположить камеру так, чтобы она смотрела на доску под таким углом:

Код: Выделить всё

                camera
/
/
/
/
/
board     /
___________
Я хочу расположить камеру так, чтобы была видна вся плата, а не маленькая. Я знаю размеры доски во время выполнения, но не во время компиляции, потому что пользователь может выбирать из множества разных досок для игры.
Я пытался вычислить, как далеко будет двигаться камера. по крайней мере, нужно видеть всю ширину доски. Я нарисовал такую ​​диаграмму:
Изображение

и выяснили, что расстояние равно половине ширины доски, разделенной на tan(FOV/2).
Переведем это в код:

Код: Выделить всё

private func setupCamera(boardWidth: CGFloat, maxBoardZ: CGFloat, boardCenterX: CGFloat) {
cameraNode = SCNNode()
let camera = SCNCamera()
cameraNode.camera = camera

let boardRadius = boardWidth / 2
let cameraDistance = boardRadius / tan(degreesToRadians(camera.fieldOfView) / 2)
let cameraHeight: Float = 10

cameraNode.position = SCNVector3(x: Float(boardCenterX), y: cameraHeight, z: Float(maxBoardZ + cameraDistance))

cameraNode.eulerAngles.x = -0.5
}

Код: Выделить всё

cameraNode
— это свойство сцены, для которого я позже установил значение pointOfView вида сцены.
Это выглядит нормально в портретном режиме (это только часть на весь экран телефона):
Изображение
Камера не могла приблизиться к доска без обрезки частей платы.
Но в альбомной ориентации плата чрезвычайно мала по сравнению с SCNView, в котором она находится:
Изображение

Камера могла сильно сдвинуться ближе! Я ожидал чего-то вроде:
Изображение

Обратите внимание на область белого фона — это SCNView.
Я думал, что поле зрения могло измениться в альбомной ориентации, но когда я проверил в отладчике , угол обзора всегда составляет 60 градусов, независимо от ориентация. Кажется, что хотя у SCNCamera есть свойство fieldOfView, у SCNView также есть свое собственное, отдельное поле зрения, которое зависит от его ширины и высоты, и я понятия не имею, как получить к нему доступ.
Как расположить камеру так, чтобы вся плата только помещалась внутри SCNView?

Подробнее здесь: https://stackoverflow.com/questions/672 ... ts-in-view
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»