几年前,我在OpenGL2.1上做了很多演示,编写了许多使用基本功能(主要是立即模式)的演示,而没有关心整个着色器方法。
现在我再次需要OpenGL用于个人项目,从我正在阅读的这种API的整个方法发生变化,因为现在几乎所有内容都是由GPU通过顶点/像素着色器直接创建的。
我想知道实际的最新技术(我的意思是开发效率和结果)的主要区别是OpenGL与我的用途相比。
是否存在任何来自旧方法的教程?我是否应该放弃手动应用转换的旧想法,使用glBegin..glEnd
等来绘制内容?
由于我正在使用Java,我想使用一个好的库,你有什么建议吗?我发现LWJGL似乎也很好,如果一切都已经管理好了,我想知道是否值得使用它,或者只是根据需要坚持一些更重要的写作组件(如数学相关对象)。
答案 0 :(得分:6)
旧的即时模式和新的做事方式之间的差异非常大。令人惊讶的是,没有那么多好的内容,你可以忽略99%的网络上的OpenGL教程。
LWJGL的好处是,一旦你理解了LWJGL和常规OpenGL调用之间的差异,你通常可以使用其他语言的教程。
我能找到的唯一3个好资源是:
“对现代OpenGL的介绍”http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html(这是一个很好的介绍,但遗憾的是很长一段时间没有新的教程)
OpenGL Superbible第五版(这是唯一一本涵盖新的做事方式的书,对于任何重返OpenGL的人来说都是必须的)http://www.amazon.com/OpenGL-SuperBible-Comprehensive-Tutorial-Reference/dp/0321712617
Java Monkey Engine使用LWJGL,因为它是唯一完全支持的渲染器(我上次检查过),浏览它的来源是LWJGL的引擎设计教育http://www.jmonkeyengine.com/
此外,LWJGL很棒。它不会给你更高级别的抽象,因为它只是一个围绕C调用的薄包装(但这也意味着它不会在尝试制作OpenGL OO时做一个平庸的工作),而且它的性能非常好。 LWJGL没有提供很多(甚至是数学),所以你很可能需要获得(或作为最后的手段)数学库来处理复杂的事情。
答案 1 :(得分:3)
Durian Software上有一些关于现代OpenGL编程的博客文章。它在C中,但它使用着色器(用GLSL编写),因此C代码的数量并不是那么好。
根据维基百科,有与Java的GLSL绑定,所以你可能想要研究它。
显然,LWJGL支持着色器:http://lwjgl.org/wiki/index.php?title=GLSL_Shaders_with_LWJGL
这是我之前提到的第一篇博文的链接:
http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Chapter-1:-The-Graphics-Pipeline.html
我希望有所帮助!