Java VBO在尝试将颜色数据从顶点传递到片段着色器时绘制黑色
尝试将vec4(颜色数据)从顶点着色器传递到片段着色器时,片段着色器的结果输出绘制黑色vbo 我尝试过改变绑定程序的位置,使用flat并添加更多的glfwWindow提示。更奇怪的是,着色器和着色器程序没有编译或链接错误 我还直接测试了片段着色器,发现它可以工作,以及绑定数据和绘制网格 渲染:Java VBO在尝试将颜色数据从顶点传递到片段着色器时绘制黑色,java,opengl,shader,lwjgl,Java,Opengl,Shader,Lwjgl,尝试将vec4(颜色数据)从顶点着色器传递到片段着色器时,片段着色器的结果输出绘制黑色vbo 我尝试过改变绑定程序的位置,使用flat并添加更多的glfwWindow提示。更奇怪的是,着色器和着色器程序没有编译或链接错误 我还直接测试了片段着色器,发现它可以工作,以及绑定数据和绘制网格 渲染: GL45.glBindVertexArray(vao); program.bind(); GL45.glEnableVertexAttribArray(
GL45.glBindVertexArray(vao);
program.bind();
GL45.glEnableVertexAttribArray(0);
GL45.glEnableVertexAttribArray(1);
meshes.forEach(mesh -> mesh.draw(vao));
GL45.glDisableVertexAttribArray(0);
GL45.glDisableVertexAttribArray(1);
program.unbind();
GL45.glBindVertexArray(0);
绘制网格:
bindData(vao);
if(beforeDraw != null)
beforeDraw.call();
GL45.glDrawElements(GL45.GL_TRIANGLES, num_vertecies, GL45.GL_UNSIGNED_INT, 0);
if(afterDraw != null)
afterDraw.call();
创建着色器程序:
/*Called by constructor where it chooses to detach and delete the previous shaders after this is called*/
this.program = glCreateProgram();
for(Shader s : shaders) glAttachShader(program, s.get());
glLinkProgram(program);
glValidateProgram(program);
if(validateProgram(program) == GL_FALSE)
printProgramErrorLog(program);
创建着色器:
shader = glCreateShader(getShaderType());
glShaderSource(shader, source);
glCompileShader(shader);
if(validateShader(shader) == GL_FALSE) {
printShaderErrorLog(shader);
delete();
}
顶点着色器:
#version 330 core
layout(location = 0) in vec3 vertex;
layout(location = 1) in float data;
out vec4 object_color;
void main(void){
gl_Position = vec4(vertex, 1.0f);
object_color = vec4(0.f, data, 1.0f, 1.0f);
}
片段着色器:
#version 330 core
in vec4 object_color;
out vec4 FragColor;
void main(void){
FragColor = object_color;
}
预期结果是带有颜色的vbo的输出。如何指定顶点属性数据的数组?@rabbi76我在draw调用之前调用lambda,该调用执行
GL45.glvertexattributepointer(0,3,GL45.glu FLOAT,false,4*4,0);GL45.glvertexattributepointer(1,1,GL45.GL_FLOAT,false,4*4,2)代码>如果已绑定命名缓冲区对象,则的最后一个参数将被视为该缓冲区中的字节偏移量。因此,对于属性“data”
来说,参数必须是3*4非常感谢,我想知道,但我不知道它是否通过类型参数自动做到这一点。当然,这并没有解决黑屏问题。顶点坐标的所有分量都在[-1.0,1.0]范围内吗?