计算片段着色器内平面的法线

时间:2013-07-04 09:06:16

标签: opengl glsl

我遇到需要做浅阴影的情况。我没有顶点着色器,因此无法将法线插入到片段着色器中。此外,我无法传入普通地图。我可以在片段着色器中完全生成法线,例如在片段坐标上吗?在我的情况下,几何体总是平面的。

延伸我想要做的事情:

我正在使用允许NV_path_renderingrendering pure vector graphics on GPU扩展程序。问题是只有片段阶段可以通过着色器访问,这基本上意味着 - 我不能使用带有NV_Path对象的顶点着色器。

2 个答案:

答案 0 :(得分:1)

由于你的形状是扁平的,NV_PATH需要compat配置文件,你可以通过内置的变化gl_Color或gl_SecondaryColor

扩展说明说有某种插值:

  

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

http://developer.download.nvidia.com/assets/gamedev/files/GL_NV_path_rendering.txt

答案 1 :(得分:1)

这是一种“将法线设置为面法线”的方法,而不知道顶点法线的任何信息(据我理解)。

https://stackoverflow.com/a/17532576/738675

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

http://meetar.github.io/three.js-normal-map-0/index6.html

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