private static int vao;
public static void main(String[] args)
{
if(!glfwInit()) throw new IllegalStateException("Unable to initialize GLFW");
long window = glfwCreateWindow(640, 480, "Test", NULL, NULL);
if(window == NULL) throw new RuntimeException("Failed to create the GLFW window");
GLFWVidMode vidmode = glfwGetVideoMode(glfwGetPrimaryMonitor());
glfwSetWindowPos(window, (vidmode.width()-640)/2, (vidmode.height()-480)/2);
glfwMakeContextCurrent(window);
glfwShowWindow(window);
GL.createCapabilities();
createVao(new float[]
{
-1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
1.0f, -1.0f, 0.0f
}
);
while(!glfwWindowShouldClose(window))
{
glfwPollEvents();
glClearColor(1, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 3);
glBindVertexArray(0);
glfwSwapBuffers(window);
}
glfwDestroyWindow(window);
glfwTerminate();
}
private static void createVao(float[] vertices)
{
vao = glGenVertexArrays();
glBindVertexArray(vao);
FloatBuffer verticesBuffer = BufferUtils.createFloatBuffer(vertices.length);
verticesBuffer.put(vertices).flip();
int vboVertices = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboVertices);
glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glDisableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
我正在尝试学习如何使用LWJGL3渲染三角形,但一直难以弄清我的代码有什么问题。它似乎与我已阅读的三个不同的教程相匹配。我究竟做错了什么?它打开窗口并渲染红色背景,但是无论我做什么,它都不会渲染三角形。这就是我所看到的: screenshot
答案 0 :(得分:0)
您的三角形很可能没有渲染,因为您没有使用着色器,如果需要,这里有一些有用的资源可用于了解着色器:
https://learnopengl.com/Getting-started/Shaders
https://youtu.be/AyNZG_mqGVE
https://youtu.be/4w7lNF8dnYw
https://youtu.be/WMYNP5SioP4
https://youtu.be/8n1GV99FJ2Y
了解了GLSL的工作原理及其用途后,您应该可以轻松地编写一个简单的着色器。渲染简单三角形所需的是将顶点着色器中的gl_Position设置为已传递的顶点的位置(可以使用layout (location = 0) in vec3 position
获得该位置),其次,您需要创建一个着色器输出颜色并将其设置为白色(输出为vec4)
除了着色器之外,您不应该调用glDisableVertexAttribArray(0);
或每次渲染前都调用glEnableVertexAttribArray(1);
。