我来自Unity world。在Unity中,我们可以很容易地旋转image based lighting
的背景天框。我看到在Swift中,我们可以通过输入以下命令来应用skybox:
// Create a new scene
let scene = SCNScene()
var IBLImage = UIImage()
scene.lightingEnvironment.contents = IBLImage
但我希望它能够旋转,这样它就可以与真实环境相匹配。到目前为止,在旋转照明环境内容方面还没有代码方面的幸运。
任何帮助都将受到高度的感谢。
发布于 2018-11-23 23:02:04
您应该使用contentsTransform实例属性-可以应用于material属性的可视内容的转换:
var contentsTransform: SCNMatrix4 { get set }
或
scene.lightingEnvironment.contentsTransform
SceneKit将此变换应用于材质附加到的几何体对象提供的纹理坐标,然后使用生成的坐标在材质曲面上映射材质特性的内容。
关于4x4矩阵的表示,请阅读here。
另外,请阅读我关于切变和缩放 (rotation) here的组合的答案。
发布于 2018-11-25 00:24:50
谢谢你的回答,基于你的解释,我创建了一个函数,如下所示
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)))
但是,例如,当我在sphere节点上看到内容时,似乎没有任何变化。我把任何角度都放在那里,似乎没有反映任何变化。
https://stackoverflow.com/questions/53437082
复制