LWJGL 和 GLSL 版本

LWJGL and GLSL Versions

最近我一直在研究 LWJGL 中的渲染引擎,我遇到了很多版本问题。所以我正在寻求关于这个新项目的正确版本的建议。

首先,LWJGL 2 还是 LWJGL 3?版本 2 仍然是最新的,但版本 3 是完全重写的并且仍然缺少一些实用程序 类;比如GLU.gluPerspective(...);

在使用了LWJGL 2的兼容性之后,我遇到了更多的问题;

因为我想坚持使用现代 OpenGL,所以我使用 VBO 来渲染我的脸。然而,当使用 GLSL 做一些基本的照明时,我不得不使用 GLSL 140 来确保与 normalise()transform() 等功能的兼容性。然后我必须启用 GL_ARB_compatibility 让我访问 gl_Normalgl_Vertexgl_Color,像这样:

#version 140
#extension GL_ARB_compatibility : require

基本上我所要求的只是一些当前的建议,互联网上的所有教程都是不同的和过时的。

所以,对于我的问题:

1) 您会推荐哪个 LWJGL 版本? 3 个是否足够用于生产?

2) 我应该使用哪个 GLSL 版本?

3) 我使用兼容层访问的数据有哪些替代品?

4) 是否有关于现代 OpenGL 的最新资源或教程?

提前感谢您为我澄清这一点。这是一个陡峭的学习曲线

编辑:我问这个的原因是因为一些错误我在尝试在我以外的某些计算机上使用 GL_ARB_compatibility 功能时收到以下错误。

**ERROR** "#extension" : "GL_ARB_compatibility" is not supported

首先,在 LWJGL 3 中,所有数学 classes 都被删除,以便您实现自己的 classes 或使用第三方独立库。显然您可以使用 LWJGL2 实用程序库来访问 GLU 函数,但建议只使用第 3 方数学库(使用矩阵方法进行透视等) LWJGL 页面上有 github 讨论:https://github.com/LWJGL/lwjgl3/issues/19

回答您的其余问题:

1) 我会推荐 LWJGL 3,因为这是目前正在开发的。有关应使用 LWJGL 3 而不是 2 的完整原因列表,请参阅官方 LWJGL 页面:https://github.com/LWJGL/lwjgl3-wiki/wiki/1.2.-Why-a-new-version

缺少模块化和静态显示 class 是引用的两个原因。 LWJGL 3 使用 GLFW,我发现它的文档特别好。

2) 为了获得最大的兼容性,您最好坚持使用 openGL 2.1。这意味着使用 GLSL 1.20。

就是说,如果您查看 Steam 开发日 'Moving to OpenGL' 演示文稿,他们表示截至 2013 年 12 月,96% 的 PC 游戏市场都具有 OpenGL 3.3+ 功能(link : http://media.steampowered.com/apps/steamdevdays/slides/movingtoopengl.pdf)。这意味着您最多可以使用 GLSL 3.30。

因此,我建议使用 3.3 和核心配置文件(无固定功能管道)

3) 许多预定义变量已从核心配置文件中删除。为了使用它们,您需要使用 GL_ARB_compatibility。替代方法是定义自定义 'in' 和 'out' 变量并将它们填充到您的顶点和片段着色器代码中。这是一个顶点着色器的小例子:

out vec4 passColor; // passed out to the frag shader
out vec2 passTexCoord;  // passed out to the frag shader

void main() {
    // gl_Poisition is still in the core profile
    gl_Position = projectionMatrix * viewMatrix * modelMatrix * inPosition;

    // need to be passed
    passColor = inColor;
    passTexCoord  = inTexCoord;
}

这里有一个很好的答案:

4) 你最好用谷歌搜索 and/or 检查 OpenGL 论坛:https://www.opengl.org/discussion_boards/forumdisplay.php/6-OpenGL-coding-beginners