簡體   English   中英

OpenGL不渲染我的網格

[英]OpenGL does not render my Mesh

我使用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)。

編輯:

好吧,我發現當談到OpenGL時,macs有點奇怪。 我需要與VBO一起使用VAO。 現在工作正常。 不管怎么說,還是要謝謝你!

我看不到您在指定用於輸出或顏色的着色器或頂點數組的任何地方。 根據您使用的配置文件,您需要執行其中一項或多項操作。

我建議檢查/設置以下內容

  • 禁用臉部剔除,以確保無論纏繞如何,您都應該看到一些東西
  • 如果您需要一個核心配置文件,則需要一個着色器以及一個頂點數組對象
  • 如果改為使用兼容性配置文件,則應在繪圖調用中調用glColor3f(1,1,1)以確保您未繪制黑色三角形
  • 您是否在渲染之前清除顏色和深度幀緩沖區?

您可能沒有在視錐中繪制該對象,還可以調用glCheckError以確保您沒有犯任何錯誤。

了解固定管線和可編程管線OpenGL之間的區別也很重要。 如果您使用的是帶有可編程管線的版本,則需要編寫着色器,否則需要設置模型視圖和投影矩陣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM