【问题标题】:OpenGL - Passing a vector into glDrawElements()OpenGL - 将矢量传递给 glDrawElements()
【发布时间】:2023-02-06 13:53:15
【问题描述】:

我试图将一个向量传递给 glDrawElements() 的最后一个参数。如果我使用数组,它工作正常。然而,当我切换到矢量时,它只渲染了对象的一部分。

这工作得很好:

//TA_CartesianSys.h
class TA_CartesianSys
{
    private:
        int drawOrder[86];
    //the rest of the class
}


//---------------------------------
//TA_CartesianSys.cpp
TA_CartesianSys::TA_CartesianSys()
{
    GLfloat CartesianVertices[] = { ... };
    int tempOrder[] = { ... };
    for(int i = 0; i < sizeof(tempOrder) / sizeof(int); i++)
    {
         drawOrder[i] = tempOrder[i];
    }
    //Code to generate and bind vertex array and buffer
    glDrawElements(GL_LINES, sizeof(drawOrder)/sizeof(int), GL_UNSIGNED_INT, drawOrder);
}

它按预期工作,这就是它的样子:

现在,我决定对 drawOrder[] 使用向量而不是数组。这是新代码:

//TA_CartesianSys.h
class TA_CartesianSys
{
    private:
    std::vector<int> drawOrder; //***NOTE: This is the change   
    //the rest of the class
}
//---------------------------------
//TA_CartesianSys.cpp
TA_CartesianSys::TA_CartesianSys()
{
    GLfloat CartesianVertices[] = { ... };
    int tempOrder[] = { ... };

    drawOrder.resize(sizeof(tempOrder) / sizeof(int));
    for(int i = 0; i < (sizeof(tempOrder) / sizeof(int)); i++)
    {
        drawOrder[i] = tempOrder[i];
    }

    //Code to generate and bind vertex array and buffer - Same as above

    glDrawElements(GL_LINES, sizeof(drawOrder)/sizeof(int), GL_UNSIGNED_INT, &drawOrder[0]);
}

这是我运行程序时得到的:

注意:中间的正方形不是该对象的一部分。它属于一个完全不同的类别。

所以,基本上,当我将 drawOrder[] 更改为向量而不是数组时,只有一小部分对象被渲染(2 行)。其余未见。

我在 draw() 函数处放置了一个断点,它表明 drawOrder 向量已正确初始化,其值与其数组计数器部分完全相同。

那么,为什么我只得到 2 条线而不是整个网格?我错过了什么?

【问题讨论】:

    标签: opengl vector


    【解决方案1】:

    矢量对象上的 sizeof 只告诉您矢量类实例的大小,而不是元素的数量。你想要的是 std::vector 的 size 成员函数,它告诉你元素的数量(即你不能将 std::vector::size 返回的数字除以元素 sizeof)。

    glDrawElements(
        GL_LINES,
        drawOrder.size(), // <<<<<
        GL_UNSIGNED_INT,
        &drawOrder[0] );
    

    【讨论】:

    • 是的,我刚刚意识到这一点。我应该更仔细地看。感谢您的答复。
    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2015-04-08
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多