Я написал тестовое приложение для iOS в Swiftui, которое показывает SpriteView и сцену . Spriteview показывает (помимо прочего) два узла Sk3dnode , которые отображают один и тот же Scnscene из разных позиций камеры. Sceneview рендерирует тот же самый scnscene .
Проблема в том, что визуализированная сцена в обоих Sk3dnode показана темнее, чем в сцене.
Сцены в Spritekit не используются, потому что они слишком темные. />
Я ожидал оба sk3dnode Code> 's (в верхней половине), чтобы отобразить сцену с той же яркости, что и сценавив (нижняя половина).
Если я просто увеличивает окружающий свет, объекты показаны слишком ярко. Следовательно, красные/зеленые/синие формы.
Я отключил встроенное освещение Sk3dnode , установив AutoEnablesDefaultlighting на false . Каким -то образом Sceneview (или ее внутренний Scnview ) должна добавить свое собственное освещение, но я не могу понять, как. Rootnode сцены показывает только мои узлы из файла .scn. куб. Существует один источник окружающего света, один точечный свет и один Omni Light. Независимо от того, какие огни я использую , оба sk3dnode все еще представляют сцену намного темнее, чем SceneView .
Вот есть Функция, которая создает два sk3dnode s:
Код: Выделить всё
func make3DNode(camPos: SCNVector3) -> SK3DNode {
// Add SceneKit scene in 3D node
let node3d = SK3DNode(viewportSize: CGSize(width: 300, height: 200))
node3d.scnScene = scnScene
node3d.autoenablesDefaultLighting = false
let camera = SCNCamera()
let cameraNode = SCNNode()
cameraNode.camera = camera
if let lookAtTarget = scnScene.rootNode.childNode(withName: "red_texture", recursively: false) {
let constraint = SCNLookAtConstraint(target: lookAtTarget)
// why does this not work?
cameraNode.constraints = [constraint]
}
cameraNode.position = camPos
node3d.pointOfView = cameraNode
return node3d
}
Cod >
Код: Выделить всё
// Add SceneKit nodes
let node3d_1 = make3DNode(camPos: SCNVector3(x: -5, y: -2, z: 14))
node3d_1.name = "3d_1"
node3d_1.position = CGPoint(x: 150, y: 110)
spriteScene.addChild(node3d_1)
let node3d_2 = make3DNode(camPos: SCNVector3(x: 5, y: 2, z: 14))
node3d_2.name = "3d_2"
node3d_2.position = CGPoint(x: 150, y: -110)
spriteScene.addChild(node3d_2)
Он включает в себя как файл сцены Spritekit, так и файл Scenekit Полем SK3DNODE S добавляются программно. Я не могу вставить код для сцен, потому что я создал файлы сцены как для Spritekit, так и для сцены. Лучше всего, если вы загрузите проект GitHub и нажимаете CMD+R в XCode для некоторого симулятора iPad.
Спасибо за любую помощь заранее.
Подробнее здесь: https://stackoverflow.com/questions/784 ... in-scnview