我来自Unity世界。在Unity中,我们可以轻松旋转image based lighting
的背景天空盒。我看到在Swift中,我们可以通过输入以下内容来应用Skybox:
// Create a new scene
let scene = SCNScene()
var IBLImage = UIImage()
scene.lightingEnvironment.contents = IBLImage
但是我希望它能够旋转以便它可以与真实环境匹配。到目前为止,在旋转照明环境内容方面,没有运气好的代码。
任何帮助将不胜感激。
答案 0 :(得分:0)
您应该使用contentsTransform实例属性-可以应用于材质属性的视觉内容的转换:
var contentsTransform: SCNMatrix4 { get set }
或
scene.lightingEnvironment.contentsTransform
SceneKit将此变换应用于材质所附加到的几何对象提供的纹理坐标,然后使用所得坐标在材质表面上映射材质属性的内容。
关于4x4矩阵的表示形式,请阅读here。
此外,请阅读我关于剪切和缩放的组合(旋转)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)))
但是,例如,当我在球节点上看到内容时,似乎没有任何变化。我把任何角度放在那里似乎都没有变化。