【问题标题】:New to OpenGL and deprecation [closed]OpenGL的新手和弃用[关闭]
【发布时间】:2010-01-16 21:58:42
【问题描述】:

我已经开始使用 PyOpenGL 3.0.1b 在 Python 中使用 OpenGL。

我查看了一些示例代码并开始运行它并对其进行修改等。一切都很好,直到我变得不那么无知了。

http://pyopengl.sourceforge.net/documentation/manual-3.0/index.xhtml 上列出了 OpenGL 函数以及它们是否被弃用。所以我心想,我只需要找到一些最新的教程,不要使用所有这些已弃用的废话。

几个小时后,没有这样的运气!弃用示例代码后弃用的示例代码...有什么地方可以查看非弃用教程吗?

【问题讨论】:

  • 不是例子,但是这个论坛帖子有一点“帮助,我不能画任何东西!”一种帮助:opengl.org/discussion_boards/…
  • 虽然如果您完全是 OpenGL 新手,我强烈建议您先学习 OpenGL 2 风格(大量关于此的教程)。 2.x 对初学者来说要简单得多,以后切换到 3.x 也不是那么难。
  • 我认为从 OpenGL 2.x 开始是危险的。在 2.x 中有很多方法可以完成任务,您很有可能开始学习在 3.x 中已弃用的方法。
  • 我同意 Malte。虽然固定功能管道对初学者来说可能更容易,但它只会让重新学习正确的方法变得更加困难。

标签: python opengl deprecated pyopengl opengl-3


【解决方案1】:

感谢 Jason L. McKesson

此处没有弃用的代码精彩示例和教程(在 OpenGL 3.3 中)

http://www.arcsynthesis.org/gltut/index.html

还有一个在这里没有过多解释的(在 OpenGL 4.x 和 3.3 中)

http://openglbook.com/the-book/

【讨论】:

  • 链接失效了。
【解决方案2】:

OpenGL ES 2.0 实际上与 OpenGL 3 非常相似,只是删除了一些功能(例如多个渲染目标、一些着色器指令等)。 OpenGL ES 2.0 编程指南书有一些教程和源代码可供下载,可以帮助您开始使用 OpenGL 3.0。在 ES 2.0 中编译的内容也将主要针对更新的 OpenGL 规范进行编译。您也可以在线搜索 ES 2.0 教程。

我还建议查看我正在开发的图形引擎 (OpenREng)。您可以查看 OpenGL 包装器类,了解新规范支持的大部分功能。

【讨论】:

  • 轻微的挑剔。 GL3 与 GL ES 2.0 非常相似。毕竟,ES 2.0 是第一个被指定的。
  • @Bahbar 我不知道为什么相似性应该按时间顺序排列。不是对称属性吗?
  • 我不建议通过 GLES 学习桌面 GL,因为这会带来更多问题。 @OP 如果您仍然感兴趣并且还没有犯过购买关于您不会使用的 API 的书的错误,请查看 tomriddle 的答案。
  • @Christian:是的。我解释的(按时间顺序)实际上不在文本中……我的错。至于“犯了错误”,在这种情况下——GLES2.0 是 GL3 的一个子集——也许你可以解释为什么它会是一个错误?我不确定我还没有看到它。 (虽然不在 cmets 中?)
  • @Bahbar 除了 ES 2 中缺少的很多重要的东西之外,没有太大的区别,可能是一些精度修饰符之类的。如果迟早您尝试移植应用程序并且必须更改某些内容,或者您​​查看桌面 GL 代码并想知道它们在做什么,这只是不合适的。虽然通过桌面 GL 学习 ES 可能比反过来学习 ES 更糟糕。但是当你真的想要不同的东西时,买一本书就太重了,因为那里有足够的材料可以教你正确的方向。
【解决方案3】:

我建议学习的方法是采用一个固定功能的程序,然后通过一次添加一个位,慢慢开始将其变成一个核心配置文件。基本上有 3 件主要的事情你需要解决,不幸的是,它们都相当大,并且以这样的方式相互关联,如果你没有在屏幕上看到任何东西,你就不知道哪个位坏了。但如果你能以正确的方式去做,你应该没问题。

首先学习顶点缓冲区对象和顶点数组对象。放弃 glBegin、glEnd、glVertex3f、glColor4f、glNormal3f、glTexCoord2f 等...

学习手动矩阵变换以放弃 glRotatef、glTranslate、glPushMatrix、glPopMatrix、glMatrixMode、glLoadIdentity、GL_PROJECTION、GL_MODELVIEW、glFrustum、glOrtho、gluLookAt、gluPerspective、gluOrtho2。我建议查看 glm,这是 OpenGL 网站在其 SDK 中提到的。当您仍在非核心配置文件上使用固定功能组件时,您可以使用 glLoadMatrixf 手动加载矩阵,稍后您需要将矩阵绑定到着色器。

学习基本的 GLSL 着色器。不推荐使用的 gl_vertex、gl_normal、ftransform() 仍应与 VBO 一起使用,您可以在完全设置着色器绑定之前使用它们。

然后做所有的shader绑定,用顶点属性代替固定的gl_vertex和gl_position。使用统一上传模型视图和投影矩阵而不是 ftransform()。以及诸如灯光和材质属性之类的东西(我倾向于上传模型视图投影而不仅仅是投影,因此着色器不会每次都计算)。

最后使用核心配置文件,您将需要一个支持创建的窗口工具包。过剩,GLFW 做。 SMFL 没有。 SDL 1.3-dev 可以。我不认为 pygame 不幸的是。核心配置文件将丢弃任何遗留的已弃用功能。

【讨论】:

  • 虽然这是一个相当不错的主意,但一旦他找到了一些学习资源,这更像是一种训练练习,因此并没有真正回答这个问题。
猜你喜欢
  • 1970-01-01
  • 2011-05-18
  • 2014-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-03-01
  • 2011-06-18
  • 2022-07-16
  • 1970-01-01
相关资源
最近更新 更多