opengl发生了什么?现在是什么样的噩梦?

时间:2011-04-16 09:55:00

标签: opengl

我在2年前使用过opengl。在一个下午,我读了一个tuto,我画了一个立方体(然后学会了如何加载任何3D模型)并学会回家用鼠标移动相机。这很简单,不到100行代码。我没有完全得到管道,但我能够做某事

现在我需要为一些基本的东西刷新opengl,基本上我需要加载3D模型(任何模型)并在固定相机的情况下移动模型。我认为那将是另一个下午。

我花了一天时间没有任何工作。我正在阅读推荐的tuto http://www.arcsynthesis.org/gltut/我没有得到任何东西,现在只绘制一个立方体,你需要很多行并使用大量的缓冲区,使用一些特殊的着色器语法....我到底是怎么回事想画一个立方体。在它定义6个方面之前。

opengl发生了什么?有些人认为现在很好,我认为这是搞砸了。 是否有任何简单的图书馆可以使我的生活更轻松?

4 个答案:

答案 0 :(得分:8)

GLUT - http://www.opengl.org/resources/libraries/glut/

ASSIMP - http://assimp.sourceforge.net/

这两个库是您在导入模型(各种格式)时创建简单应用程序所需的全部内容。阅读它的文档和示例,以便更好地理解如何“粘合”OpenGL和ASSIMP工作。

Documentation

至于OpenGL更难以理解吗?不,我近几年从OpenGL中学到的是,GFX编程从不简单或只用几行代码完成,你必须有条理,你必须要小心,甚至简单原始(例如立方体)需要有超过100行代码才能使其具有良好和灵活性(例如,如果您希望在多边形或纹理上进行更多细分)。

答案 1 :(得分:4)

如果你仅在两年前学会了它,那么教程就已经过时了。已知立即模式在很长一段时间内都被弃用。实际上,第一个计划放弃它并显示列表可以追溯到2003年。

Vertex Arrays自版本1.1开始就存在,从那以后它们一直是向OpenGL发送几何体的首选方法。在立即模式中,每个顶点都会导致多个函数调用,因此对于任何严重复杂的对象,您需要花费更多时间来管理函数调用堆栈,而不是进行实际的渲染工如果您在引入Vertex Arrays后使用它们,那么切换到Vertex Buffer Objects就像插入或替换几行一样复杂。

使用OpenGL-3的最大障碍是在Windows中,必须使用代理上下文来访问选择OpenGL-3功能以创建上下文所需的扩展功能。然而再次没有大障碍,20行代码顶部。有些程序,例如我的程序,无论如何都会创建一个代理GL上下文,所有可共享数据都上传到该上下文中,这样可以快速销毁/重新创建可见上下文,但是可以完全访问纹理,VBO和东西(你可以共享VBO,这是使用它们而不是普通顶点数组的另一个原因;这可能看起来不像是大事,至少在单个进程中使用上下文时不是这样;但是在X11 / GLX等平台上可以在X11客户端之间共享OpenGL上下文甚至可能在不同的机器上运行!)

同样存在像矩阵操作堆栈这样的函数导致人们误解,OpenGL是一些矩阵数学库,有些甚至认为它是一个特别快的。两者都不是真的。删除矩阵操作函数是一件非常重要且正确的事情。无论如何,每个严肃的OpenGL应用程序都将实现自己的矩阵数学。例如,任何现代游戏都使用某种物理引擎直接用于OpenGL(glLoadMatrix或glUniformMatrix),变换矩阵通过物理计算吐出,完全绕过其余的矩阵函数。这也意味着拥有多个矩阵堆栈(GL_PROJECTION,GL_MODELVIEW,GL_TEXTURE,GL_COLOR)的唯一理由,即能够在几个矩阵上使用相同的一组操作函数,已经过时,可能已被{{1 }}。然而,制服和着色器已经存在,所以合乎逻辑的步骤不是引入新功能,而是重用已经用于此任务的现有API,而不是删除不再需要的东西

TL; DR:新的OpenGL-3 API非常简单地使用它。它更清晰,陷阱更少,恕我直言也更新手友好。

答案 2 :(得分:2)

您不必使用缓冲区对象。您可以使用已弃用的即时模式。它会慢一些,但是如果你真的不在乎,那就继续按照以前的方式使用OpenGL。 NeHe在OpenGL 1.x上有一些很好的tutorials

Swiftless在OpenGL 3.x和4.x上有一些很好的tutorials(只有几个非常基本的),但是你所发现的学习曲线非常陡峭。

答案 3 :(得分:1)

它必须是openGL吗? XNA提供了绘制3D模型而不会背伤的能力..值得一看