Javascript Three.js-如何在着色器中获取顶点的方向

Javascript Three.js-如何在着色器中获取顶点的方向,javascript,vector,three.js,glsl,direction,Javascript,Vector,Three.js,Glsl,Direction,我正在为大气模拟编写自定义着色器(使用示例)。首先,我添加了这个着色器,没有对球体几何体进行任何更改,我得到了我的天空球体,它正是我想要的:) 因此,glsl大气的源代码是这样工作的:有一个名为大气的函数,它返回自定义方向上大气像素的颜色 我将球体的局部顶点坐标发送到片段着色器。因为球体以0,0,0为中心,所以我可以通过使用这些插值顶点坐标来获得眼睛的方向。我计算大气函数的方向等于这个插值顶点位置 这是球体的“外部”视图: 下一步是实现空中透视。空中透视使远处的物体得到大气的颜色(就像远处的

我正在为大气模拟编写自定义着色器(使用示例)。首先,我添加了这个着色器,没有对球体几何体进行任何更改,我得到了我的天空球体,它正是我想要的:)

因此,glsl大气的源代码是这样工作的:有一个名为大气的函数,它返回自定义方向上大气像素的颜色

我将球体的局部顶点坐标发送到片段着色器。因为球体以0,0,0为中心,所以我可以通过使用这些插值顶点坐标来获得眼睛的方向。我计算大气函数的方向等于这个插值顶点位置

这是球体的“外部”视图:

下一步是实现空中透视。空中透视使远处的物体得到大气的颜色(就像远处的山变成蓝色一样)。公式如下所示:

ObjectColor是颜色(纹理),blendfactor是0到1之间的值,skyColor是atmosphere函数返回的值(请参见上面github链接上的代码)

因此,我需要获取地形(或我将添加到场景中的任何其他几何体)中每个顶点方向上的大气颜色。但现在我不能只取局部顶点坐标来得到方向向量。我需要一个向量来显示从相机到地形顶点的方向,但我不知道怎么做

为了进行测试,我决定在没有纹理的情况下对我的地形应用一些样例着色器,所以我使用了FinalColor=SkyColor的公式。从逻辑上讲,因为方向相同,所以地形应该是不可见的,地形和球体的颜色必须相同

我试过这个公式:

eyedir = (modelMatrix*vec4(position,1.0)).xyz-myPos; // in vertex shader
然后,使用
大气(eyedir,…)
获取片段着色器中的方向

问题是我不能只发送视图方向(我可以从摄影机对象获得),因为这样所有顶点都将是一种颜色,所以该方向应该在顶点之间改变

你能给我一些关于如何计算这个方向向量的建议吗

致以最良好的祝愿

真编码器

顺便说一句,如果我把相机放在0,0,0,那么它会按照建议工作

但当我移动时,我开始看到幽灵地形:)

开始时:

当我搬家时:

eyedir = (modelMatrix*vec4(position,1.0)).xyz-myPos; // in vertex shader