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