【发布时间】:2017-08-12 15:28:26
【问题描述】:
我正在尝试在 SceneKit 中模拟深度图,而且我对 3D 编程还很陌生。我在 XY 中创建了一个三角形网格,在 Z 中海洋深度。计划是使用片段着色器在颜色之间缩放这个 Z 值以创建一个漂亮的地图
在着色器的文档中,它说以前着色器的值在以后的着色器中可用。特别是,第一个(几何)着色器有一个名为 _geometry 的结构,其中包含模型空间中的顶点。但是,由于某种原因,在我的片段着色器中它没有定义,当我尝试使用它时出现错误。
编译失败的错误输出显示其他值可用,例如 _surface 和 _light,但没有 _geometry。
我已经尝试将 _surface.position vec3 转换回模型空间,但恐怕我对转换的深度不够。根据文档,这个值在视图空间中,所以我试过了:
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 转换回模型空间?
谢谢,
【问题讨论】: