матрица проекции. Если вы используете ортопроекцию, расстояния отсечения являются частью матрицы, которую вы рассчитываете сами.

у использовать ортогональную проекцию для отображения 3D-сцены в моем приложении. В своем коде я вставил рамку в сцену и установил орфографическую проекцию точки зрения как удар. Камера в (0,0,500) смотрит в направлении -z и показывает начало мира. Таким образом, камера должна быть в состоянии захватить коробку.

let cameraNode = SCNNode()
let pov = SCNCamera()
pov.usesOrthographicProjection = true
let width = UISreen.main.bounds.size.width
let glMat = GLKMatrix4MakeOrtho(-width/2, width/2, -width/2, width/2, 1, 1000)
pov.projectionTransform = SCNMatrix4FromGLKMatrix4(glMat)
cameraNode.camera = pov
cameraNode.position = SCNVector3.init(0, 0, 500)
scene.rootNode.addChildNode(cameraNode)

let boxGeo = SCNBox.init(width: 100, height: 100, length: 1, chamferRadius: 0)
let box = SCNNode.init(geometry: boxGeo)
scene.rootNode.addChildNode(box)

Но я ничего не вижу. Я узнаю, если установленоorthographicScale вwidth/2.0 будет работать правильно.

pov.orthographicScale = Double(width/2);

Вопрос 1 : Я не знаю, почему это работает. Я читал документы Apple, но все еще в замешательстве.https://developer.apple.com/documentation/scenekit/scncamera/1436612-orthographicscale?language=objc

orthographicScale

Определяет коэффициент увеличения камеры при использовании ортографической проекции.

Почему мне нужно увеличить ортографическую проекцию? Я уже установил размер этого черезGLKMatrix4MakeOrtho.

Я не уверен, относится ли это к трансформации области просмотра? Поскольку преобразование области просмотра в OpenGL вычисляется следующим образом:https://docs.microsoft.com/en-us/windows/desktop/opengl/glviewport

Вопрос 2 : Я также нахожу, что если я создаю матрицу проекции, как удар, она работает так же, как и раньше.

let glMat = GLKMatrix4MakeOrtho(0, width, 0, width, 1, 1000)

В OpenGL это означает другое окно просмотра и будет отображать другой раздел сцены.

Любая помощь приветствуется!

Ответы на вопрос(1)

Ваш ответ на вопрос