OpenGL不渲染我的网格



使用LWJGL我试图在屏幕上渲染一个简单的网格,但OpenGL决定什么都不做。(

所以我有一个网格类,创建一个VBO。我可以添加一些顶点,然后在屏幕上绘制。

public class Mesh {
    private int vbo;
    private int size = 0;
    public Mesh() {
        vbo = glGenBuffers();
    }
    public void addVertices(Vertex[] vertices) {
        size = vertices.length;
        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glBufferData(GL_ARRAY_BUFFER, Util.createFlippedBuffer(vertices), GL_STATIC_DRAW);
    }
    public void draw() {
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glVertexAttribPointer(0, 3, GL_FLOAT, false, Vertex.SIZE * 4, 0);
        glDrawArrays(GL_TRIANGLES, 0, size);
        glDisableVertexAttribArray(0);
    }
}

下面是我如何添加顶点到我的网格:

mesh = new Mesh();
Vertex[] vertices = new Vertex[] { new Vertex(new Vector3f(-1, -1, 0)),
                                   new Vertex(new Vector3f(-1, 1, 0)),
                                   new Vertex(new Vector3f(0, 1, 0)) };
mesh.addVertices(vertices);

我很确定我按正确的(顺时针)顺序添加了它们。

我的OpenGL设置:

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glFrontFace(GL_CW);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);

调用 glGetError () 返回没有错误(0)。

编辑:

嗯,我发现mac在OpenGL方面有点奇怪。我需要与VBO一起使用VAO。现在它运行良好。谢谢!

我没有看到你在任何地方指定输出着色器或颜色,或顶点数组。根据您正在使用的配置文件,您需要执行其中一个或多个操作。

我建议检查/设置以下

  • 禁用人脸剔除以确保无论绕组如何,您都应该看到一些东西
  • 如果你请求一个核心配置文件,你将需要一个着色器,很可能还需要一个顶点数组对象
  • 如果你使用的是一个兼容性配置文件,你应该调用glColor3f(1,1,1)在你的绘制调用,以确保你没有绘制一个黑色的三角形
  • 你在渲染前清除颜色和深度帧缓冲区了吗?

你可能没有在视锥内绘制对象,也调用glCheckError来确保你没有犯任何错误。

了解固定管道和可编程管道OpenGL之间的区别也很重要。如果你使用的是带有可编程管道的版本,你将需要编写着色器,否则你将需要设置模型视图和投影矩阵。

相关内容

  • 没有找到相关文章

最新更新