我正在按照本指南http://open.gl/学习如何使用现代opengl进行编程。我陷入了一件事。早期使用较旧的opengl Api,我曾经创建过不同的函数来绘制不同类型的形状。就像drawRect(),drawCircle()等一样。我需要做的就是在glBegin()和glEnd()中使用不同组合的glVertex3f()。
但是在OpenGl3.2 +中,即使绘制一个矩形,我们也要编写很多代码。我知道它可以让你更好地控制渲染,但我很困惑你在渲染多个东西时会怎么做,比如绘制矩形,圆圈等。我是否需要多次编写所有代码,包括着色器,或者我可以重用代码。
我已经实现了这段代码http://open.gl/content/code/c2_triangle_elements.txt 这个例子绘制了一个矩形,但如果我想绘制一个三角形和这个矩形,那我该怎么做。
答案 0 :(得分:2)
您可以重复使用大部分代码。所有着色器都可以加载一次,并通过调用glUseProgram
重用。对于所有缓冲区,您可以创建一次,然后根据需要重复使用它们。
您可能想要创建一些类ShaderClass
和ShapeClass
。
基础着色器类通常有2或3个参数,例如program
,vertexShader
和fragmentShader
(都是一些ID)。扩展它们时,还要添加着色器中的所有制服和属性,以便以后可以使用它们来修改绘图(例如更改颜色)。
ShapeClass
通常包含顶点缓冲区ID(和可选的索引缓冲区ID)以及要绘制的顶点数。
所以最后当想要绘制一些形状时,你只使用你已经创建和编译的着色器,绑定并设置形状缓冲区中的顶点数据并调用绘图。