对于大学,我们通过JOGL/Java学习使用OpenGL 1.1的3D图形,它仍然是相当简单的东西:
标准绘制方法(GL_TRIANGLE_STRIP
,GL_LINES
)
使用立方贝塞尔曲线
绘制赛道/使用矢量
使对象(机器人)具有动画效果
使用2D纹理
在本课程结束后,我想继续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的接口,您还可以将多线程应用于您的应用程序.
SOIL:http://www.lonesock.net/soil.html SOIL是从文件加载纹理的一个很好的API