Modern OpenGL 3.x及以上版本如何绘制图元?

时间:2011-10-14 22:53:34

标签: opengl glut deprecated primitive

我必须使用OpenGL(3.3,4.2)绘制大量原语,我知道使用glutSolidTeapot();我可以画出一个带过剩的茶壶原型。

但似乎没有从这个命令生成的顶点数组,我不知道这种命令是否已被弃用。

我注意到很多现代OpenGL教程只是加载他们自己的原语并且避免使用过剩,他们甚至从3d网格格式文件中加载了简单的几何。

我的目的是尽可能快地绘制这些原语。尽可能使用新的OpenGL。

那么如何在现代OpenGL中绘制基元?

2 个答案:

答案 0 :(得分:8)

由于GLUT(不是OpenGL的一部分以任何方式)使用立即模式glBegin/glEnd并使用已弃用的固定函数内置属性来绘制其原始元素,因此您将无法使用如果你想专注于不推荐的现代核心功能,那就再使用它们了。

而不是使用内置属性(如glVertexglNormal,...),您必须使用自己的通用顶点属性(当然,与适当的顶点着色器结合使用),而不是glBegin/glEnd调用你必须使用VBO提供的顶点数组绘制基元,并使用glDrawArrays/glDrawElements及其衍生物进行绘制。

虽然没有什么可以阻止您将这些对象的顶点数据存储为源代码中的变量或手动生成它们,但是从文件中加载它们是最简单和最通用的方式,至少对于像犹他茶壶这样相当复杂的对象。 Wavefront OBJ format是一种相当简单的基于ASCII的网格文件格式,非常容易阅读,可能是一个值得研究的起点,因为它几乎可以被任何建模软件导出。

答案 1 :(得分:2)

使用着色器完全使用新的(未弃用的)OpenGL标准进行渲染。

着色器属性只能是缓冲区对象。

很快,您不需要指定顶点位置,颜色,纹理坐标等的一组数组就是客户端内存,而是将它们上传到缓冲区对象中。