OpenGL Vertex Shader无法正常工作

时间:2013-08-22 19:56:53

标签: java opengl lwjgl vertex-shader

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

顶点着色器:

#version 120

void main() {
    gl_Position = gl_Vertex * 0.5;
}

Fragment Shader:

#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因子)如预期,它的顶点保持不变。我做错了什么?

1 个答案:

答案 0 :(得分:2)

问题是gl_Vertex是一个四维向量。将其直接与标量相乘不会得到预期的缩放结果。在将同构gl_Position转换为笛卡尔屏幕坐标时,OpenGL将x,y,z与w分量相除。 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);