旋转照明环境内容ARKit和SceneKit

时间:2018-11-22 19:27:50

标签: swift scenekit augmented-reality arkit light

我来自Unity世界。在Unity中,我们可以轻松旋转image based lighting的背景天空盒。我看到在Swift中,我们可以通过输入以下内容来应用Skybox:

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

但是我希望它能够旋转以便它可以与真实环境匹配。到目前为止,在旋转照明环境内容方面,没有运气好的代码。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您应该使用contentsTransform实例属性-可以应用于材质属性的视觉内容的转换:

var contentsTransform: SCNMatrix4 { get set }

scene.lightingEnvironment.contentsTransform
  

SceneKit将此变换应用于材质所附加到的几何对象提供的纹理坐标,然后使用所得坐标在材质表面上映射材质属性的内容。

关于4x4矩阵的表示形式,请阅读here

此外,请阅读我关于剪切和缩放的组合(旋转)here的答案。

enter image description here

答案 1 :(得分:0)

感谢您的回答,根据您的解释,我创建了如下函数

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)))

但是,例如,当我在球节点上看到内容时,似乎没有任何变化。我把任何角度放在那里似乎都没有变化。