Я хочу использовать ортогональную проекцию для отображения 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 это означает другое окно просмотра и будет отображать другой раздел сцены.
Любая помощь приветствуется!