C++ 固定管道至glsl gl_正常/v正常/v_正常

C++ 固定管道至glsl gl_正常/v正常/v_正常,c++,opengl,glsl,C++,Opengl,Glsl,我读得越多,就越糊涂。我正在努力学习从旧的opengl1固定管道到现代gl。我已经学到了很多,但有一件事我仍然不确定。在旧教程中,its仅用作gl_Normal,而在新教程中,its通常指vnormal或v_Normal 在旧版本中,我不必考虑这一点,在固定管道中,它似乎是自动提供的。那么从哪里得到这个,或者更确切地说,如何计算它呢?必须在C++中完成,还是可以在顶点或片段着色器中完成,也可以从VITT位置(在旧教程中引用为代码> GLVEXTEX)? 一个示例或伪代码就好了。正常永远不会自动出

我读得越多,就越糊涂。我正在努力学习从旧的
opengl1
固定管道到现代gl。我已经学到了很多,但有一件事我仍然不确定。在旧教程中,its仅用作
gl_Normal
,而在新教程中,its通常指
vnormal
v_Normal

在旧版本中,我不必考虑这一点,在固定管道中,它似乎是自动提供的。那么从哪里得到这个,或者更确切地说,如何计算它呢?必须在C++中完成,还是可以在顶点或片段着色器中完成,也可以从VITT位置(在旧教程中引用为代码> GLVEXTEX</代码>)?
一个示例或伪代码就好了。

正常永远不会自动出现。即使使用固定管道,您也必须自己提供法线

gl_Normal
是来自
glNormalPointer
的预定义顶点着色器属性。在最新的GLs(不确定实际版本,可能是4.*)中,这些函数被弃用,因此所有属性都必须来自
glVertexAttributePointer
——没有预定义的属性,程序员必须自己将每个数组绑定到属性位置

所以,
normal
,或者不管它叫什么——就是命名属性。您必须获取其位置(使用
glGetAttriblLocation
)并将包含顶点法线(指定顶点点处的法线)的数组指定给该位置


至于计算法线,对于平面(只是两个三角形边的叉积)来说很简单,但是对于平滑着色,法线必须在最近的多边形之间插值。它通常在3D网格编辑器中完成,并仅导出到文件。

“至于计算法线,对于平面(只是两个三角形边的叉积)来说很简单,但是对于平滑着色,法线必须在最近的多边形之间插值。通常在3D网格编辑器中完成,并仅导出到文件。”-谢谢,这终于填补了我的空白!不知道为什么我在任何教程中都没有这样读过,在这些教程中,这些值对我来说似乎总是“不知从何而来”