我使用的代码基本上没有修改。这个网站上的所有其他教程都对我有用。然而,当我尝试运行它时,我最终得到的只是一个矢车菊屏幕。
经过一番挖掘,我发现(使用 println 进行跟踪调试)所有对 glGetUniformLocation 的调用(从第 248 行开始)都返回负数。鉴于这是一个托管在 LWJGL 网站上的相当专业的教程,而且我在未修改的情况下复制了它(除了我更改的一些硬编码文件路径),我觉得它可能与我的 openGL 版本、我的显卡有关,或类似的神秘事物。
在查看glGetUniformLocation 的详细信息后,我发现如果您要求的 Uniform 不存在或类型错误,它可能会返回负值。为了表明这不是我的问题,我将在此处重现 GLSL 代码和对 glGetUniformLocation 的调用:
#version 150 core
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
in vec4 in_Position;
in vec4 in_Color;
in vec2 in_TextureCoord;
out vec4 pass_Color;
out vec2 pass_TextureCoord;
void main(void) {
gl_Position = in_Position;
// Override gl_Position with our new calculated position
gl_Position = projectionMatrix * viewMatrix * modelMatrix * in_Position;
pass_Color = in_Color;
pass_TextureCoord = in_TextureCoord;
}
和调用:
projectionMatrixLocation = GL20.glGetUniformLocation(pId, "projectionMatrix");
viewMatrixLocation = GL20.glGetUniformLocation(pId, "viewMatrix");
modelMatrixLocation = GL20.glGetUniformLocation(pId, "modelMatrix");
System.out.println(pId+", "+projectionMatrixLocation+", "+
viewMatrixLocation+", "+modelMatrixLocation);
我错过了什么?