0
我試圖將一個向量傳遞給glDrawElements()的最後一個參數。如果我使用數組,它工作正常。但是,當我切換到矢量時,它只渲染了一部分對象。OpenGL - 將一個向量傳遞到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行,而不是整個網格?我錯過了什麼?
是的,我意識到這一點。我應該仔細看看。感謝您的答覆。 – TATN