Java 使用和不使用着色器绘制三角形VBO
我试图在屏幕上画一个简单的红色三角形。如果不使用VBO,代码将按预期工作。当尝试使用VBO(带或不带着色器)绘制它时,它根本没有效果 我的代码:Java 使用和不使用着色器绘制三角形VBO,java,opengl,glfw,vbo,Java,Opengl,Glfw,Vbo,我试图在屏幕上画一个简单的红色三角形。如果不使用VBO,代码将按预期工作。当尝试使用VBO(带或不带着色器)绘制它时,它根本没有效果 我的代码: //Works glBegin(GL_TRIANGLES); glVertex3f(0f, 0f, 0.0f); glVertex3f(0.5f, 0f, 0.0f); glVertex3f(0.5f, 0.5f, 0.0f); glEnd(); //Does not work int vertexArrayID = glGenVertexArra
//Works
glBegin(GL_TRIANGLES);
glVertex3f(0f, 0f, 0.0f);
glVertex3f(0.5f, 0f, 0.0f);
glVertex3f(0.5f, 0.5f, 0.0f);
glEnd();
//Does not work
int vertexArrayID = glGenVertexArrays();
glBindVertexArray(vertexArrayID);
float[] g_vertex_buffer_data = new float[]{
0f, 0f, 0.0f,
0.5f, 00f, 0.0f,
0.5f, 0.5f, 0.0f,
};
int vertexbuffer = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, FloatBuffer.wrap(g_vertex_buffer_data), GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
0, // attribute 0. No particular reason for 0, but must match the layout in the shader.
3, // size
GL_FLOAT, // type
false, // normalized?
0, // stride
0 // array buffer offset
);
glDrawArrays(GL_TRIANGLES, 0, 3); // 3 indices starting at 0 -> 1 triangle
glDisableVertexAttribArray(0);
glDeleteBuffers(vertexbuffer);
glDeleteVertexArrays(vertexArrayID);
System.out.println(glGetError());
glGetError()始终返回0
我使用默认的、教程复制的着色器来测试我的代码(在使用上述代码之前,我链接并绑定程序):
#版本330核心
//输入顶点数据,此着色器的所有执行都不同。
vec3 Vertu模型空间中的布局(位置=0);
void main(){
gl_Position.xyz=垂直模型空间;
gl_位置w=1.0;
}
#版本330核心
//输出数据
输出vec3颜色;
void main()
{
//输出颜色=红色
颜色=vec3(1,0,0);
}
着色器不会输出到glGetError()
而是有自己的错误消息表系统,请查看并查找glGetShaderInfoLog
和glGetProgramInfoLog
用法。另外,如果您使用了nVidia,它有时会很有用(自然仅用于调试目的),您是在循环中调用glDrawArrays()还是只调用一次?你有空的地方吗?还要检查浮点顶点数组,修复该00f值。着色器不会输出到glGetError()
,而是有自己的error mesage系统。请查看并查找glGetShaderInfoLog
和glGetProgramInfoLog
用法。另外,如果您使用了nVidia,它有时会很有用(自然仅用于调试目的),您是在循环中调用glDrawArrays()还是只调用一次?你有空的地方吗?同时检查浮动顶点数组,修复该00f值。