我是3D渲染的新手
Metal
和
SceneKit
。我看到需要将特定的“逆”变换传递给渲染器/着色器。我打印出了这些变换,看不出它们之间有什么关系。谷歌搜索的结果是一堆相当高级的主题。
所以我问像我这样的傻瓜一个问题:
着色器的“逆”视图变换是什么意思?
如果我不反转变换,会发生什么?
// Apple code below (with original comment):
// Pass view-appropriate image transform to the shader modifier so
// that the mapped video lines up correctly with the background video.
let sceneView = renderer as? ARSCNView,
let frame = sceneView.session.currentFrame
let affineTransform = frame.displayTransform(for: .portrait, viewportSize: self.view.bounds.size)
let transform = SCNMatrix4(affineTransform)
let inverse = SCNMatrix4Invert(transform) // pass to shader
transform:
SCNMatrix4(
m11: 0.0, m12: 1.0, m13: 0.0, m14: 0.0,
m21: -1.5227804, m22: 0.0, m23: 0.0, m24: 0.0,
m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0,
m41: 1.2613902, m42: -0.0, m43: 0.0, m44: 1.0)
----
inversed:
SCNMatrix4(
m11: 0.0, m12: -0.6566935, m13: 0.0, m14: 0.0,
m21: 1.0, m22: 0.0, m23: 0.0, m24: 0.0,
m31: 0.0, m32: 0.0, m33: 1.0, m34: 0.0,
m41: 0.0, m42: 0.8283468, m43: 0.0, m44: 1.0)
这里有一些信息表明,上面的矩阵是平移、旋转和缩放的组合。虽然CGAffine变换将这些元素拆分为不同的元素,但在这里它们都被夹紧在一起:
https://www.javatpoint.com/computer-graphics-3d-inverse-transformations