【问题标题】:OpenGL Vertex Shader not workingOpenGL顶点着色器不工作
【发布时间】:2013-08-22 19:56:52
【问题描述】:

我正在学习尝试使用 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_Position = gl_Vertex * 0.5 将修改包括 w 分量在内的整个 4 维向量。做类似gl_Position = vec4(gl_Vertex.xyz * 0.5, 1.0)

标签: java opengl lwjgl vertex-shader


【解决方案1】:

问题在于gl_Vertex 是一个 4 维向量。直接将它与标量相乘不会给您预期的缩放结果。 OpenGL 在将齐次gl_Position 转换为笛卡尔屏幕坐标时,将 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    相关资源
    最近更新 更多