Opengl 计算碎片着色器内部平面的法线

Opengl 计算碎片着色器内部平面的法线,opengl,glsl,Opengl,Glsl,我有一个情况,我需要做光阴影。我没有顶点着色器,因此无法将法线插值到片段着色器中。我也没有能力通过一个正常的地图。我是否可以完全基于片段着色器生成法线(例如基于片段坐标)?在我的例子中,几何体总是平面的 为了扩展我正在尝试做的事情: 我正在使用允许的扩展。问题是只有片段阶段可以通过着色器访问,这基本上意味着-我不能将顶点着色器与NV_路径对象一起使用。因为您的形状是平面的,NV_路径需要兼容的配置文件,所以您可以通过内置的varyings gl_Color或gl_SecondaryColor通过

我有一个情况,我需要做光阴影。我没有顶点着色器,因此无法将法线插值到片段着色器中。我也没有能力通过一个正常的地图。我是否可以完全基于片段着色器生成法线(例如基于片段坐标)?在我的例子中,几何体总是平面的

为了扩展我正在尝试做的事情:


我正在使用允许的扩展。问题是只有片段阶段可以通过着色器访问,这基本上意味着-我不能将顶点着色器与NV_路径对象一起使用。

因为您的形状是平面的,NV_路径需要兼容的配置文件,所以您可以通过内置的varyings gl_Color或gl_SecondaryColor通过法线

扩展描述说有某种插值:

逐顶点数据插值(第3.6.1节)。路径基本体既没有常规顶点,也没有逐顶点数据。相反,片段生成插值逐片段颜色、纹理坐标集和雾坐标,作为对象空间或眼睛空间路径坐标的线性函数,或直接使用当前颜色、纹理坐标集或雾坐标状态

这里有一种方法“将法线设置为面法线”,而不知道任何顶点法线(据我所知)

我在这里有一个3.js演示:


我的实现是从顶点着色器获取顶点位置数据,但听起来您可以通过其他方式获取这些数据。

“我没有顶点着色器”是吗?你是如何使用OpenGL-2的?通常情况下,您必须提供至少一个VS和一个FS以使事情正常进行。只是一个FS只适用于VS被固定的功能。不,我使用的是NV_路径文本,它只允许通过片段阶段访问着色器。你可以只编写顶点着色器吗?不,NV_路径明确指出,只有片段着色器可以与之配合使用,因为它使用完全不同的管道进行原始变换…@MichaelIV:我建议你将这些信息放入原始问题中。但第二个想法是,我不确定它是否有效,因为颜色不会插值。没有顶点…@MichaelIV怎么办你想实现什么?从你所写的内容中,我了解到你的几何体是平面的,意味着每条曲线有一条法线,这似乎不是真的。这就是问题所在,没有“几何体”。这是路径。它们的光栅化方式不同于基于顶点的几何体。如果你读到NV_路径,你就会明白我的意思。@MichaelIV,那么你的意思是什么“在我的情况下,几何体始终是平面的”?是的,你是对的,我的错…几何体是矢量形状(可以是文本或任何其他形状),但它是平面几何体。