Zep*_*pee 14 opengl shader rendering
我一直在使用OpenGL了大约一年了,学到了很多东西.不幸的是我的方式得知这是旧的预3.x的方式,这意味着即时模式,默认着色器,矩阵堆栈等我或多或少都有哪些通过观察OpenGL的规格已经从再改为现在的想法,但是我并不完全了解一些新的做事方式.
从我的理解,他们摆脱了矩阵堆叠的,这意味着你必须跟踪自己的变换矩阵,这似乎并没有太复杂的.他们还摆脱了直接模式,这意味着你现在需要使用维也纳组织或VAOs(永远不知道哪一个,或许两个..)发送像素/正常/纹理等.着色器程序的信息.我真的不明白这些对象的工作方式,我认为你需要把所有的信息放进去,并提供某种形式的OFSET显示像素,正常和纹理坐标之间的分隔符.有人可以简单解释一下这实际上是如何工作的(或者给我一个解释它的链接)?我尝试维基百科和谷歌搜索,但发现自己还是没有完全理解它们.
我想更多地了解的另一点是着色器,因为我从未使用它们.我不会问如何编写它们或任何东西,只需要在那里进行什么以及opengl仍然为你做什么.更具体地说,您需要在着色器中执行哪些操作才能获得基本渲染程序?我知道你需要做所有的计算并使用你的矩阵来计算真实的顶点位置.但是opengl是否仍然会处理背面剔除,线条剪裁,多边形填充和其他较低级别的问题,或者您是否必须将它们编码到着色器中(或者它们甚至不属于着色器)?
由于立即模式已被弃用,因此执行"hello triangle"应用程序会涉及更多.这里有一个很好的现代OpenGL教程:
http://arcsynthesis.org/gltut/
你应该仔细阅读.请记住,它不使用VAO,因此您必须在之后的其他地方阅读它.VAO不会改变很多东西,所以你不必忘记提到的教程中使用它们.
关于你的第二个问题......你的顶点着色器将由OpenGL为每个顶点执行.你的工作是计算顶点的最终位置,并准备发送到片段着色器的数据(如法线,光数据......),给定顶点和你发送到着色器的其他数据的属性(制服 - 你会读到的它在教程中).片段着色器将按片段执行,在片段着色器中,您将计算每个片段的最终颜色.
你可以在这里看到:
http://www.opengl.org/sdk/docs/man4/
像glPolygonMode和glCullFace这样的东西仍然存在.