我正在遵循本指南 http://open.gl/学习如何使用现代 opengl 进行编程。我被困在一件事上。早些时候使用旧的 opengl Api,我曾经创建不同的函数来绘制不同类型的形状。像 drawRect()、drawCircle() 等。我需要做的就是在 glBegin() 和 glEnd() 中以不同的组合使用 glVertex3f()。
但在 OpenGl3.2+ 中,即使绘制一个矩形,我们也必须编写大量代码。我知道它可以让您更好地控制渲染,但是当您同时渲染多个东西(例如绘制矩形、圆形等)时,我不知道该怎么做。我是否需要多次编写所有代码(包括着色器),或者我可以重用代码。
我已经实现了这段代码http://open.gl/content/code/c2_triangle_elements.txt 这个例子画了一个矩形,但是如果我想在这个矩形旁边画一个三角形,那我该怎么做。
最佳答案
您可以重用大部分代码。所有着色器都可以加载一次并通过调用 glUseProgram
重新使用。对于所有缓冲区,您可以创建一次,然后根据需要多次重复使用它们。
您可能想要创建一些类,例如 ShaderClass
和 ShapeClass
。
基础着色器类通常有 2 或 3 个参数,如 program
、vertexShader
和 fragmentShader
(都是一些 ID)。当您扩展它们时,还会添加着色器中的所有制服和属性,以便您稍后可以使用它们来修改您的绘图(例如更改颜色)。
ShapeClass
通常包含顶点缓冲区 ID(和可选的索引缓冲区 ID)和要绘制的顶点数。
所以最后当你想要绘制一些形状时,你只需要使用你已经创建和编译的着色器,从你的形状缓冲区绑定(bind)和设置顶点数据,然后调用绘制。
关于c++ - 如何在 OpenGL3.2+ 中渲染多个形状和对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22755122/