gpt4 book ai didi

java - OpenGL 顶点着色器不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:28:16 26 4
gpt4 key购买 nike

我正在学习尝试使用 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_Vertex 是一个 4 维 vector 。将它直接与标量相乘不会得到预期的缩放结果。在将齐次 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);

关于java - OpenGL 顶点着色器不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18389713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com