簡體   English   中英

OpenGL和C ++:實時處理和綁定緩沖區?

[英]OpenGL and C++: Real-Time Handling and Binding Buffers?

我一直在玩OpenGL,玩了大約2周,創建了硬編碼的VBO,並制作了旋轉的三角形,但是一直困擾着我的問題是,我到底該如何實時創建多個VBO / VAO,這樣我才能處理多個對象? 以及如何在屏幕上渲染多個對象? 綁定系統似乎是限制性的和限制性的。 最終,我希望能夠使用單個Lua函數創建對象並繪制它們。 很抱歉,沒有代碼,但是我沒有代碼開頭,因為我正在嘗試從概念上解決問題。

當您說OpenGL綁定系統限制並限制了您的權利時,它就是正確的。 但是,這很容易習慣。 處理GL對象時的工作流程主要包括:

  • 綁定資源
  • 使用(繪制/修改/查詢)
  • 解除資源綁定

現在,具體來說,您將如何為封裝VAO / VBO的C ++類建模? 具有隱式綁定的一種非常簡單的方法可能是:

class MyVAO {
public:

    void Draw()
    {
        glBindVertexArray(vao);
        glDrawElements(...);
        // etc...
        glBindVertexArray(0);
    }

private:

    GLuint vb, ib, vao;
};

// Then in the client code:
MyVAO vao;
...
vao.Draw();

使用顯式綁定:

class MyVAO {
public:

    void Bind()
    {
        glBindVertexArray(vao);
    }

    void Unbind()
    {
        glBindVertexArray(0);
    }

    void Draw()
    {
        glDrawElements(...);
        // etc...
    }

private:

    GLuint vb, ib, vao;
};

// Then in the client code:
MyVAO vao;
...
vao.Bind();
vao.Draw();
vao.Unbind();

顯式或隱式綁定是您的選擇。 隱式綁定可以使工作自動化,但是當您共享代碼中的資源時,這樣做可能很浪費。 如果您忘記在類實現中進行綁定/取消綁定,那么也會導致一些難以跟蹤的錯誤。 顯式綁定允許您執行一些操作,例如長時間綁定資源並使用一段時間,但是如果您忘記自己綁定/解除綁定資源,調試實例可能是一場噩夢。

我個人傾向於使用顯式綁定。 我不喜歡幕后發生的事情。 我更想知道什么時候有資源。 但最終,您應該選擇最適合您的項目。

暫無
暫無

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

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