【发布时间】:2015-10-30 18:40:42
【问题描述】:
您好,我一直在试图弄清楚为什么这个三角形不会绘制!这是我的代码。 它只是使用 VBO 和 VAO 的基本 LWJGL OpenGL 代码,我不知道为什么它不绘图。我已经确认着色器正在正确编译
//bindings available for use.
GL.createCapabilities();
// Set the clear color
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
float vertices[] = {
0.0f, 0.5f, // Vertex 1 (X, Y)
0.5f, -0.5f, // Vertex 2 (X, Y)
-0.5f, -0.5f // Vertex 3 (X, Y)
};
int vbo;
vbo = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo);
FloatBuffer vboBuff = BufferUtils.createFloatBuffer(vertices.length);
vboBuff.put(vertices);
vboBuff.flip();
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vboBuff, GL15.GL_STATIC_DRAW);
int vertShade = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertShade,Reader.read("shaders/main.frag"));
glCompileShader(vertShade);
int fragShade = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragShade,Reader.read("shaders/main.frag"));
glCompileShader(fragShade);
String failed = glGetShaderInfoLog(fragShade);
System.err.println(failed);
int shaderprogram = glCreateProgram();
glAttachShader(shaderprogram,vertShade);
glAttachShader(shaderprogram,fragShade);
glLinkProgram(shaderprogram);
glUseProgram(shaderprogram);
int posAttrib = glGetAttribLocation(shaderprogram,"position");
glVertexAttribPointer(posAttrib,2,GL_FLOAT,false,0,0);
glEnableVertexAttribArray(posAttrib);
int vao;
vao = glGenVertexArrays();
// Run the rendering loop until the user has attempted to close
// the window or has pressed the ESCAPE key.
while ( glfwWindowShouldClose(window) == GL_FALSE ) {;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clear the framebuffer
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window); // swap the color buffers
// Poll for window events. The key callback above will only be
// invoked during this call.
glfwPollEvents();
}
SHADERS:///它们在单独的文件中 片段着色器:
#version 150
out vec4 outColor;
void main()
{
outColor = vec4(1.0, 1.0, 1.0, 1.0);
}
顶点
#version 150
in vec2 position;
void main()
{
gl_Position = vec4(position, 0.0, 1.0);
}
在 while 循环之前编辑最后几行现在看起来像这样:
int shaderprogram = glCreateProgram();
glAttachShader(shaderprogram,vertShade);
glAttachShader(shaderprogram,fragShade);
glLinkProgram(shaderprogram);
glUseProgram(shaderprogram);
int vao;
vao = glGenVertexArrays();
glBindVertexArray(vbo);
int posAttrib = glGetAttribLocation(shaderprogram,"position");
glVertexAttribPointer(posAttrib,2,GL_FLOAT,false,0,0);
glEnableVertexAttribArray(posAttrib);
【问题讨论】:
-
@genpfault 哦,我可能在文档中错过了这样做的命令是什么?
-
您正在构建相同的着色器两次。在两个
glShaderSource()调用中,文件名都是main.frag。如果您检查链接状态,您应该会看到它失败。
标签: java opengl graphics lwjgl