Java OpenGL顶点着色器不工作

Java OpenGL顶点着色器不工作,java,opengl,lwjgl,vertex-shader,Java,Opengl,Lwjgl,Vertex Shader,我正在学习用Java和LWJGL学习GLSL,但我目前在使用基本顶点着色器时遇到了问题 顶点着色器: #version 120 void main() { gl_Position = gl_Vertex * 0.5; } 片段着色器: #version 120 void main() { gl_FragColor = vec4(1.0, 0.4, 0.4, 1.0); } 渲染代码: public void draw() { glBindBuffer(GL_ARR

我正在学习用Java和LWJGL学习GLSL,但我目前在使用基本顶点着色器时遇到了问题

顶点着色器:

#version 120

void main() {
    gl_Position = gl_Vertex * 0.5;
}
片段着色器:

#version 120

void main() {
    gl_FragColor = vec4(1.0, 0.4, 0.4, 1.0);
}
渲染代码:

public void draw() {
    glBindBuffer(GL_ARRAY_BUFFER, vbo);
    glVertexPointer(3, GL_FLOAT, 0, 0L);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);

    glEnableClientState(GL_VERTEX_ARRAY);
    glDrawElements(GL_TRIANGLES, size, GL_UNSIGNED_INT, 0);
    glDisableClientState(GL_VERTEX_ARRAY);
}

编译不会产生错误,片段着色器工作良好,为我绘制的简单三角形着色。唯一的问题是,我没有看到三角形按预期缩小(0.5倍),它的顶点保持不变。我做错了什么?

问题是
gl\u顶点
是一个四维向量。将其直接与标量相乘不会得到预期的缩放结果。将齐次
gl_位置
转换为笛卡尔屏幕坐标时,OpenGL用w分量分割x、y、z。0.5/0.5=1.0,因此结果没有缩放

gl_Position = gl_Vertex * 0.5;
这将x、y、z和w分量乘以0.5。将代码更改为仅缩放x、y和z

gl_Position = vec4(gl_Vertex.xyz * 0.5, gl_Vertex.w);

是否确定程序已绑定并启用?是的,片段着色器正在工作。
gl\u Position=gl\u Vertex*0.5
将修改整个四维向量,包括w分量。执行类似于
gl\u Position=vec4(gl\u Vertex.xyz*0.5,1.0)