我来自Unity世界。在Unity中,我们可以轻松地为image based lighting
旋转背景天空盒。我在Swift中看到我们可以通过键入以下内容来应用天空盒:
// Create a new scene
let scene = SCNScene()
var IBLImage = UIImage()
scene.lightingEnvironment.contents = IBLImage
但我希望它能够旋转,以便它可以与真实环境相匹配。到目前为止,在旋转照明环境内容方面没有运气。
任何帮助将受到高度赞赏。
您应该使用contentsTransform实例属性 - 可以应用于材质属性的可视内容的转换:
var contentsTransform: SCNMatrix4 { get set }
要么
scene.lightingEnvironment.contentsTransform
SceneKit将此变换应用于由材质附加到的几何对象提供的纹理坐标,然后使用生成的坐标在材质表面上映射材质属性的内容。
关于4x4矩阵的表示读取here。
另外,请阅读我关于剪切和缩放(旋转)here组合的答案。
感谢您的回答,基于您的解释,我创建了如下函数
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)))
但是,当我在球体节点上看到内容时似乎没有变化。我把任何角度放在那里似乎没有任何变化。