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

标签 opengl glut deprecated primitive

我必须用 OpenGL (3.3, 4.2) 绘制很多图元,我知道 glutSolidTeapot() ;我可以用过剩画一个茶壶原始人。

但是这个命令好像不会生成顶点数组,不知道这种命令有没有被弃用。

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

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

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

最佳答案

由于 GLUT(它是 无论如何都不是 OpenGL 的一部分)使用立即模式 glBegin/glEnd 绘制其原语并且使用已弃用的固定功能内置属性,如果您想专注于未弃用的现代核心功能,您将无法再使用这些属性。

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

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

关于opengl - Modern OpenGL 3.x 及更高版本如何绘制图元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7774403/

相关文章:

C++简单程序错误

c++ - OpenGL:在 glEnableVertexAttribArray 之后的 INVALID_OPERATION

c - 为什么我需要 glut.h、glut32.lib、glut32.dll ALL 来编译 openGL 程序?

performance - 为什么我的 GLFW 窗口这么慢?

c++ - 一张一张打开箱顶

c++ - 控制台窗口有图标,但 OpenGL/GLUT 窗口没有。为什么?

warnings - 如何删除 open-ACS、Project-Open 日志文件中已弃用的警告

android - 在哪里可以找到新功能弃用的 Android 功能列表?

c++ - 使用 glOrtho 进行滚动游戏。宇宙飞船 "shudders"

c++ - 设计着色器类