Modern OpenGL 3.x 及更高版本如何绘制图元?

发布于 2024-12-10 03:58:08 字数 265 浏览 1 评论 0原文

我必须使用 OpenGL (3.3, 4.2) 绘制大量基元,我知道 glutSolidTeapot() ;我可以用 glut 画一个茶壶基元。

但似乎这个命令不会生成顶点数组,而且我不知道这种命令是否已被弃用。

我注意到许多现代 OpenGL 教程只是加载自己的图元并避免仅使用 glut,他们甚至从 3d 网格格式文件加载简单的几何图形。

我的目的是尽可能快地绘制这些图元。并尽可能多地使用新的 OpenGL。

那么现代OpenGL如何绘制图元呢?

I must draw lots of primitives with OpenGL (3.3, 4.2), I knew with glutSolidTeapot() ; I can draw a teapot primitive with glut.

But it seems there won't be a vertex array generated from this command, and I don't know if this kind of commands are deprecated or not.

And I noticed lots of modern OpenGL tutorials just loads their own primitives and avoided to just use glut, they even loaded simple geometry from 3d mesh format file.

My purpose is to just draw these primitives as quick as possible.And use the new OpenGL as much as possible.

So that how to draw primitives in modern OpenGL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

街角卖回忆 2024-12-17 03:58:08

由于 GLUT(无论如何都不是 OpenGL 的一部分)使用立即模式 glBegin/glEnd 并使用已弃用的固定函数内置属性来绘制其基元,因此您不会如果您想专注于未弃用的现代核心功能,则可以再使用它们。

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

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

As GLUT (which is not part of OpenGL in any way) draws its primitves using immediate mode glBegin/glEnd and using the deprecated fixed-function builtin attributes, you won't be able to use these anymore, if you want to concentrate on non-deprecated, modern core functionality.

Instead of using the builtin attributes (like glVertex, glNormal, ...) you have to use your own generic vertex attributes (in conjunction with an appropriate vertex shader, of course) and instead of glBegin/glEnd calls you have to draw primitives using vertex arrays fed by VBOs and drawn using glDrawArrays/glDrawElements and their derivatives.

Whereas nothing prevents you from storing the vertex data for these objects as variables in your source code or to generate them manually, loading them from files is the easiest and most generic way, at least for such rather complex objects like the Utah teapot. The Wavefront OBJ format is a rather simple ASCII based mesh file format that is quite easy to read and might be a starting point to look into, as it can be exported by virtually any modelling software.

茶色山野 2024-12-17 03:58:08

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

Shader属性只能是buffer对象。

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

Rendering with the new (non deprecated) OpenGL standards is done exclusively by using shaders.

Shader attribute can only be buffer objects.

Shortly, instead of having a set of arrays that specify vertex positions, colors, texture coordinates and so on, is client memory, you havfe to upload them in buffer objects.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文