【发布时间】:2011-05-18 16:53:26
【问题描述】:
我已经使用 OpenGL 大约一年了,并且学到了很多东西。不幸的是,我了解到它的方式是旧的 3.x 之前的方式,即立即模式、默认着色器、矩阵堆栈等。通过查看 OpenGL 规范,我或多或少知道从那时到现在发生了什么变化,但是我不完全理解一些新的做事方式。
据我了解,他们摆脱了矩阵堆栈,这意味着您必须跟踪自己的转换矩阵,这似乎并不太复杂。他们还摆脱了即时模式,这意味着您现在需要使用 VBO 或 VAO(永远不知道哪一个,也许两者都...)来发送像素/法线/纹理等。着色器程序的信息。我并不真正了解这些对象的工作方式,我认为您需要将所有信息放入其中,并提供某种偏移量以显示像素、法线和纹理坐标之间的分隔符。有人可以简要解释一下这实际上是如何工作的(或给我发送一个解释它的链接)吗?我尝试了维基百科和谷歌搜索,但发现自己仍然不太了解它们。
还有一点我想了解更多关于着色器的信息,因为我从未使用过它们。我不会问如何编码它们或任何东西,只是需要在那里输入什么以及 opengl 仍然为你做什么。更具体地说,您需要在着色器中做什么才能获得基本的渲染程序?我知道你需要做所有的光照计算并使用你的矩阵来计算真正的顶点位置。但是,opengl 是否仍然处理背面剔除、剪线、多边形填充和其他较低级别的问题,还是您必须自己将它们编码到着色器中(或者它们甚至不属于着色器)?
【问题讨论】: