无法访问片段着色器中的 _geometry 变量
Unable to access _geometry variable in fragment shader
我正在尝试在 SceneKit 中模拟深度图,我对 3D 编程还很陌生。我在 XY 中创建了一个三角形网格,海洋深度在 Z 中。计划是使用片段着色器在颜色之间缩放此 Z 值以创建一个漂亮的地图
在着色器的文档中,它说以前着色器的值在以后的着色器中可用。特别是,第一个(几何)着色器有一个名为_geometry 的结构,它包含模型 space 中的顶点。但是,出于某种原因,在我的片段着色器中它没有定义,当我尝试使用它时出现错误。
编译失败的错误输出显示其他值可用,例如 _surface 和 _light,但没有 _geometry。
我已经尝试从 _surface.position vec3 转换回模型 space,但恐怕我无法理解这些转换。根据文档,此值可见 space,因此我已尝试:
vec4 model4 = vec4(_surface.position, 1.0);
vec4 model_position = u_inverseModelViewTransform * model4;
if (model_position.z .....
但这并没有给我正确的 Z 值。u_inverseModelViewProjectionTransform 似乎也不存在。
我也试过写一个几何着色器,它什么都不做只是为了确保 _geometry 存在于该着色器中,并希望拥有几何着色器会在我的片段着色器中包含 _geometry 但没有快乐
我的问题是:如何在我的片段着色器中获取 _geometry 变量,或者如果没有它,我如何将 _surface.position 转换回模型 space?
谢谢,
_geometry
结构仅在顶点着色器中可用。
文档似乎表明 u_inverseModelViewProjectionTransform
应该作为统一变量存在,但我也无法使用它。
作为一种解决方法,我一直在片段着色器中使用类似以下内容的方法从视图到模型space。
vec4 model_position = u_inverseModelTransform * u_inverseViewTransform * model4;
编辑:
Xcode 似乎不再在编译失败时转储整个 SceneKit 着色器,幸运的是您仍然可以通过 GPU 调试看到完整的代码 UI。事实证明,您还可以访问片段着色器中的 commonprofile_node
结构。 下面是更好的解决方案
vec4 model_position = scn_node.inverseModelViewTransform * model4;
祝你好运!
我正在尝试在 SceneKit 中模拟深度图,我对 3D 编程还很陌生。我在 XY 中创建了一个三角形网格,海洋深度在 Z 中。计划是使用片段着色器在颜色之间缩放此 Z 值以创建一个漂亮的地图
在着色器的文档中,它说以前着色器的值在以后的着色器中可用。特别是,第一个(几何)着色器有一个名为_geometry 的结构,它包含模型 space 中的顶点。但是,出于某种原因,在我的片段着色器中它没有定义,当我尝试使用它时出现错误。
编译失败的错误输出显示其他值可用,例如 _surface 和 _light,但没有 _geometry。
我已经尝试从 _surface.position vec3 转换回模型 space,但恐怕我无法理解这些转换。根据文档,此值可见 space,因此我已尝试:
vec4 model4 = vec4(_surface.position, 1.0);
vec4 model_position = u_inverseModelViewTransform * model4;
if (model_position.z .....
但这并没有给我正确的 Z 值。u_inverseModelViewProjectionTransform 似乎也不存在。
我也试过写一个几何着色器,它什么都不做只是为了确保 _geometry 存在于该着色器中,并希望拥有几何着色器会在我的片段着色器中包含 _geometry 但没有快乐
我的问题是:如何在我的片段着色器中获取 _geometry 变量,或者如果没有它,我如何将 _surface.position 转换回模型 space?
谢谢,
_geometry
结构仅在顶点着色器中可用。
文档似乎表明 u_inverseModelViewProjectionTransform
应该作为统一变量存在,但我也无法使用它。
作为一种解决方法,我一直在片段着色器中使用类似以下内容的方法从视图到模型space。
vec4 model_position = u_inverseModelTransform * u_inverseViewTransform * model4;
编辑:
Xcode 似乎不再在编译失败时转储整个 SceneKit 着色器,幸运的是您仍然可以通过 GPU 调试看到完整的代码 UI。事实证明,您还可以访问片段着色器中的 commonprofile_node
结构。 下面是更好的解决方案
vec4 model_position = scn_node.inverseModelViewTransform * model4;
祝你好运!