SceneKit 球体法线似乎随着相机移动而改变?

Posted

技术标签:

【中文标题】SceneKit 球体法线似乎随着相机移动而改变?【英文标题】:SceneKit sphere normals appear to change as the camera moves? 【发布时间】:2021-07-01 19:06:35 【问题描述】:

以下示例中 SCNSphere 的法线似乎随着相机旋转而发生变化,这似乎不正确,表明我误解了一些基本的东西。

在放置圆柱体以突出显示 x、y 和 z 轴(分别为红色、绿色和蓝色)和具有单位半径的球体和以下自定义片段着色器修改器的场景中:

_output.color.rgb = _surface.normal;

(0, 0, 10) 位置(即沿 z 轴)的摄像头呈现以下内容:

这看起来是对的,因为在 x、y 和 z 轴上向外突出的法线分别是红色、绿色和蓝色,并且始终具有预期的渐变。但是,如果我们随后将相机旋转到位置 (10, 0, 0)(即沿 x 轴),这就是渲染场景:

这表明法线已经改变,因为渐变不再对应于坐标空间中的预期方向(事实上,这种颜色模式适用于相机的任何旋转)。 p>

【问题讨论】:

【参考方案1】:

来自documentation:

几何字段(如位置和法线)在视图中表示 空间。您可以使用 SceneKit 的制服(例如 u_inverseViewTransform) 在不同的坐标空间中进行操作, 但您必须在写入结果之前转换回视图空间。

所以法线在相机的坐标系中表示,而不是在对象或世界空间中。

【讨论】:

啊。有道理,+1 供参考

以上是关于SceneKit 球体法线似乎随着相机移动而改变?的主要内容,如果未能解决你的问题,请参考以下文章

在 Scenekit 中移动相机

SceneKit:围绕任意点进行轨道运行而无需相机跳跃或将锚点移动到中心?

计算给定球体上扭曲椭圆的偏移量

DAE文件解析错误

DAE 文件解析错误

使用 Swift 在 Scenekit 中移动相机