在大学里,我们正在通过 JOGL/Java 使用 OpenGL 1.1 学习 3D 图形,它仍然是相当简单的东西:
- 标准绘制方法(
GL_TRIANGLE_STRIP
、GL_LINES
) - 使用三次贝塞尔曲线
- 绘制赛道/使用 vector
- 使物体(机器人)具有动画效果
- 使用 2D 纹理
学完这门类(class)后,我想继续 3D 图形编程,我已经尝试过几次了,看来我只能通过构建自己的(简单)引擎才能学好它,就这样吧.
我们在大学里使用 OpenGL 1.1,因为它仍然相当简单和基础,但我认为业界已经是 4.3 版本了?
有人可以说出主要差异,可能是在功能上,但对编程方法更感兴趣吗?
我注意到 OpenGL 1.1 中的很多事情都是在 CPU 端完成的,尽管它已经有了 GPU 支持。
创建好看的游戏是否需要着色器语言,或者为什么它们被如此频繁地使用,我发现它们(在我的空闲时间)异常难以理解。
最佳答案
主要区别在于访问图形管道的方式。
意味着OpenGL 1.1到2.0的图形管线已经完全固定。
您可以通过预定义的 OpenGL 函数影响 GPU 行为。 (glBegin
、glPushMatrix
、glPopMatrix
...)
现代 OpenGL 使您能够影响渲染过程的大多数阶段。
可编程流水线分为:
- 顶点着色
- 镶嵌
- 几何着色
- 片段着色
当前的 GPU 提供的驱动程序可以使用 OpenGL 着色语言 (GLSL) 进行编程,以对渲染过程的每个阶段进行动态编程。
管道引用:
- 固定功能:http://en.wikipedia.org/wiki/Fixed-function
- 可编程 (GLSL):http://www.opengl.org/documentation/glsl/
更新,由于评论:
由于您能够自定义渲染过程的每个阶段,因此您必须实现适当的着色器程序来自行实现照明、阴影甚至投影。这对于开始来说似乎很糟糕,但你有很多教程可以接触它,并且你仍然可以使用 OpenGL 的一些功能,因为它们是向后兼容的。 例如,我仍在使用 gluPerspective 函数来创建投影矩阵。
看看这里:http://open.gl/introduction 这是一个非常复杂且易于理解的教程,旨在帮助您接触现代 OpenGL。
以下是一些 API 链接,可为您提供支持
现代 OpenGL 编程
glm:http://glm.g-truc.net/0.9.5/index.html glm 为您提供所有必要的数学并且与 GLSL 完全兼容 在我看来,glm 是必备的
glfw:http://www.glfw.org/ glfw 为您提供创建和初始化图形上下文的函数 它是操作系统、屏幕和 GPU 的接口(interface) 此外,您还可以将多线程应用于您的应用程序。
土壤:http://www.lonesock.net/soil.html SOIL 是一个很好的 API,用于从文件加载纹理
关于java - OpenGL 1.1 和当前 4.3 之间的主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21030123/