旋转照明环境内容ARKit和SceneKit

问题描述 投票:0回答:2

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

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

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

任何帮助将受到高度赞赏。

swift scenekit augmented-reality arkit light
2个回答
0
投票

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

var contentsTransform: SCNMatrix4 { get set }

要么

scene.lightingEnvironment.contentsTransform

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

关于4x4矩阵的表示读取here

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

enter image description here


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

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

© www.soinside.com 2019 - 2024. All rights reserved.