在 iOS 上学习 OpenGLES 2.0 [关闭]
Posted
技术标签:
【中文标题】在 iOS 上学习 OpenGLES 2.0 [关闭]【英文标题】:Learning OpenGLES 2.0 on iOS [closed] 【发布时间】:2012-01-18 22:04:36 【问题描述】:我是 OpenGL ES 2.0 的初学者,我正在寻找一本可以帮助我学习的好书/资源。我找到了几本书:
OpenGL® ES 2.0 编程指南 iPhone 3D 编程:使用 OpenGL ES 开发图形应用程序但在阅读亚马逊评论时,我看到他们要么假设以前了解 OpenGL,要么不是专门为 ios 编写的。 (我知道 OpenGL 应该很容易移植,但我正在寻找一本书/资源,其中包含 C 而非 C++ 中的示例,用于讨论 iOS 上下文中的 OpenGL)
我还找到了this,它确实帮助我掌握了基本概念,但不幸的是,它们涵盖了 OpenGL ES 1.1 并且仅描述了基础知识。
任何帮助将不胜感激!
【问题讨论】:
对于投票结束的人:这是怎么回事?我不是在就烹饪书征求意见。你愿意解释一下吗? 【参考方案1】:我强烈推荐 Brad Larson 的 iTunes U 上关于 OpenGl ES 2.0 的会议。它非常深入,我发现它很有帮助。你可以找到它here。
【讨论】:
【参考方案2】:比一年前更容易找到适用于 iOS(或任何操作系统)的 OpenGL ES 2.0 材料。
对于从纯粹的 iOS 角度编写的内容,Jeff LaMarche 未出版的书中的章节很难被击败,该书以 here 开头。您链接到他的 OpenGL ES 1.1 教程,这些教程也很棒,但他没有将他较新的 2.0 材料放在该列表中。
Philip Rideout 的iPhone 3D Programming 是一本涵盖 OpenGL ES 1.1 和 2.0 的好书。它并不假定您了解 OpenGL ES,并且他确实解释了理解他在说什么所需的大量数学和其他基础知识。他在接近尾声时掌握了一些相当先进的技术。然而,他的所有代码都是用 C++ 编写的,而不是 Objective-C,所以对于习惯于 Cocoa 开发的人来说,这可能有点令人不安。尽管如此,OpenGL ES 的核心 C API 是相同的,所以很容易看出发生了什么。
如果您正在寻找特定的效果,OpenGL Shading Language 这本书仍然是您可以参考的主要资源之一。虽然是为桌面 OpenGL 编写的,但那里提供的大多数着色语言和着色器直接转换为 OpenGL ES 2.0,只需要稍作修改。
书籍ShaderX6、ShaderX7、GPU Pro 和GPU Pro 2 也有专门介绍 OpenGL ES 2.0 的部分,其中提供了一些在其他地方找不到的渲染和调整提示。不过,那些是更高级(也更昂贵)的书。
如果您刚刚开始使用 OpenGL ES 2.0,那么开始使用 GLKit(仅适用于 iOS 5.0)可能不是一个坏主意,它可以简化渲染缓冲区和简单着色器周围的一些常规设置工作 -基于效果。 Apple 的 WWDC 2011 videos 对此有一些很好的材料,但他们 2009 年和 2010 年的视频(如果你能找到它们,一些可在apple archive 获得)提供了更多关于 OpenGL ES 2.0 的介绍性材料。
最后,正如安迪所提到的,我在 iTunes U 上教授了一门关于该主题的课程,您可以免费下载 here。该课程的课程笔记可以在here 找到或下载为VoodooPad 文件here。我警告你,我在 OpenGL ES 2.0 课程中的技术含量相当快,所以你可能想观看上一学期的 1.1 课程here。我还在this article 中谈到了我对 OpenGL ES 2.0 所做的一些关于我的开源应用程序(如果您想使用功能性 OpenGL ES 2.0,可以从here 获取其源代码) iOS 应用程序)。
【讨论】:
感谢布拉德非常详细的回答!我不敢相信我错过了 Jeff LaMarche 关于 OpenGL ES 2.0 的章节。再次感谢! 嗨布拉德,你的 ios 5+、arc 等课程有更新吗? @DaveKliman - 不幸的是,没有。我目前没有时间再教这门课。然而,我发现我在 iPhone OS 3.0 和 iOS 4.0 之间教授课程的方式几乎没有什么变化,所以我不认为如果我现在用 iOS 5.0 重新审视这一点,事情会发生巨大的不同。我将在 CocoaConf 上发表关于 ARC 的演讲,因此我可能会附上一篇关于该主题的详细文章。我不确定是否会提供该视频。 那会很酷...我正在保存你的东西,等我完成cs193p。我已经习惯于在内部过滤所有保留/释放/释放的东西......我希望永远不必使用它...... @DaveKliman - 是的,你仍然必须这样做。核心基础对象(通过 CFRetain 和 CFRelease 管理的对象)不由 ARC 处理。您使用 malloc() 等创建的原始内存范围也不是。我在这里再谈一点:***.com/a/6388601/19679,你应该阅读 Mike Ash 对这方面的桥接方面的描述:mikeash.com/pyblog/…,因为在某些情况下这会变得很棘手。【参考方案3】:我阅读了您列出的书籍,尤其是第一本很棒 - 但它对 GL ES 的影响很短(我已经了解桌面 GL,但我仍然需要填补很多“空白”)。
我已经写了一系列关于在 iOS 上“正确”执行 ES 2 的博客文章 - 即仅使用现代 GL 命令,尽可能使用 Apple 的 GLKit 以节省时间/减少打字,避免陷阱/陷阱苹果专用硬件(PVR 芯片)等
这里的索引:http://t-machine.org/index.php/2013/08/29/glkit-to-the-max-opengl-es-2-0-for-ios-part-1-features/
【讨论】:
【参考方案4】:对于 iOs 开放 GL 的非常基础的学习,我建议看看这个http://antonholmquist.com/blog/opengl-es-2-0-ios-tutorial-getting-started/。这给出了顶点和片段着色器的基本概念。完成后,初学者可以阅读其他解释 openGL 详细概念的教程。
【讨论】:
以上是关于在 iOS 上学习 OpenGLES 2.0 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
OpenGL学习随笔-- OpenGL ES 2.0渲染管线
IOS:OpenGL ES 2.0 与 3.0 中动态分支着色器的性能
Apple 的 iPhone OpenGLES 2.0 模板项目中的投影矩阵