我试图将一个向量传递给 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 行而不是整个网格?我错过了什么?