OpenGL不工作的java顶点着色器
我正在学习用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倍),它的顶点保持不变。我做错了什么
# 1 楼答案
问题是
gl_Vertex
是一个四维向量。将其直接与标量相乘不会得到预期的缩放结果。在将齐次gl_Position
转换为笛卡尔屏幕坐标时,OpenGL将x、y、z与w分量分开。0.5/0.5=1.0,因此结果没有缩放这将x、y、z和w分量乘以0.5。将代码更改为仅缩放x、y和z