Вращающееся освещение среды контента ARKit и SceneKit - PullRequest
0 голосов
/ 22 ноября 2018

Я родом из мира Единства.В Unity мы можем легко повернуть фоновый скайбокс на image based lighting.Я вижу, что в Swift мы можем применить скайбокс, набрав:

// Create a new scene
let scene = SCNScene()
var IBLImage = UIImage()
scene.lightingEnvironment.contents = IBLImage

Но я хочу, чтобы он мог вращаться так, чтобы он мог соответствовать реальной среде.Пока что не повезло с кодом с точки зрения вращающегося освещения.

Любая помощь будет высоко оценена.

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Спасибо за ответ, основываясь на вашем объяснении, я создал следующую функцию:

func makeRotationAroundY(angle: Float) -> simd_float4x4 {
 let rows = [
        simd_float4( cos(angle), Float(0.0), -sin(angle), Float(0.0)),
        simd_float4( Float(0.0), Float(1.0), Float(0.0), Float(0.0)),
        simd_float4( sin(angle), Float(0.0), cos(angle), Float(0.0)),
        simd_float4( Float(0.0), Float(0.0), Float(0.0), Float(1.0))
    ]
 return float4x4(rows: rows)
 }

и назвал

scene.lightingEnvironment.contentsTransform = SCNMatrix4(makeRotationAroundY(angle: GLKMathDegreesToRadians(180)))

Однако при просмотре контента изменений, похоже, нет.на узле сферы, например.Я положил любой угол там, кажется, не отражает никаких изменений.

0 голосов
/ 24 ноября 2018

Необходимо использовать свойство экземпляра contentsTransform - преобразование, которое можно применить к визуальному содержимому свойства материала:

var contentsTransform: SCNMatrix4 { get set }

или

scene.lightingEnvironment.contentsTransform

SceneKit применяет это преобразование к координатам текстуры, предоставленным геометрическим объектом, к которому прикреплен материал, а затем использует полученные координаты для сопоставления содержимого свойства материала с поверхностью материала.

О представлении матрицы 4x4 читайте здесь .

Также прочитайте мой ответ о комбинации сдвига и масштаба (вращение) здесь .

enter image description here

...