Ios SceneKit球体法线是否随着摄影机的移动而改变?

Ios SceneKit球体法线是否随着摄影机的移动而改变?,ios,shader,scenekit,fragment-shader,normals,Ios,Shader,Scenekit,Fragment Shader,Normals,下面示例中的SCNSphere的法线似乎随着相机旋转而改变,这似乎不正确,表明我误解了一些基本的东西 在放置圆柱体以高亮显示x、y和z轴(分别为红色、绿色和蓝色)和具有单位半径的球体以及以下自定义片段着色器修改器的场景中: \u output.color.rgb=\u surface.normal 位于位置(0,0,10)(即沿z轴)的相机渲染以下内容: 这看起来是正确的,因为在x、y和z轴上向外投影的法线分别为红色、绿色和蓝色,并且具有预期的渐变。但是,如果我们随后将相机旋转到位置(10,0

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

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

\u output.color.rgb=\u surface.normal

位于位置
(0,0,10)
(即沿z轴)的相机渲染以下内容:

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

这表明法线发生了变化,因为渐变不再对应坐标空间中的预期方向(事实上,此颜色图案适用于相机的任何旋转)。

来自:

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


所以法线是用摄像机的坐标系表示的,它不在物体或世界空间中。

Ah。有道理,参考值为+1