我正在學習OpenGL中的頂點數組對象。使用mingw gcc作爲我的編譯器運行代碼塊。我用這個(只是一堆四邊形用作牆壁)將二維數組傳遞給只有一維數組的函數(C++)
void setup_world() // Sets up the world using the world.txt file
{
float x, y, z, u, v;
FILE *filein;
char oneline[255];
filein = fopen("Data/world.txt", "rt");
readstr(filein, oneline);
sscanf(oneline, "NUMPOLLIES %d\n", &numpolygons);
int cols = 13;
int rows = numpolygons+1;
polygondata = new float*[rows];
for(int i = 0; i < rows; i++)
polygondata[i] = new float[cols];
polygondata[0][0] = 69.01;
for (int loop = 0; loop < numpolygons; loop++)
{
readstr(filein, oneline);
sscanf(oneline, "%f %f %f %f %f %f", &x, &y, &z, &u, &v);
polygondata[loop][0] = x;
polygondata[loop][1] = y;
polygondata[loop][2] = z;
readstr(filein, oneline);
sscanf(oneline, "%f %f %f %f %f %f", &x, &y, &z, &u, &v);
polygondata[loop][3] = x;
polygondata[loop][4] = y;
polygondata[loop][5] = z;
readstr(filein, oneline);
sscanf(oneline, "%f %f %f %f %f %f", &x, &y, &z, &u, &v);
polygondata[loop][6] = x;
polygondata[loop][7] = y;
polygondata[loop][8] = z;
readstr(filein, oneline);
sscanf(oneline, "%f %f %f %f %f %f", &x, &y, &z, &u, &v);
polygondata[loop][9] = x;
polygondata[loop][10] = y;
polygondata[loop][11] = z;
}
fclose(filein);
return;
}
我知道這是一種多餘的加載數據從一個文本文件,但它會做,直到我避開重寫存儲所有的部分數據放入數組中。
典型地,數據被傳遞到OpenGL的使用頂點數組對象
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
的OpenGL通常會採取在類似於該陣列,產生一個四
float g_vertex_buffer_data[] =
{
-1.0, -1.0,-5.0,
1.0, -1.0, -5.0,
1.0, 1.0, -5.0,
-1.0, 1.0, -5.0,
};
函數需要g_vertex_buffer_data成爲一個但是我將所有頂點數據存儲到二維數組中,第一個維用於存儲幾個多邊形(在這種情況下爲QUADS),第二個維用於存儲四個矩形的所有12個頂點。
什麼是最好的方法來解決這個問題?
我提出的一個建議解決方案是創建另一個數組(單個維度,然而),該數組將暫時存儲來自一個多邊形的頂點數據。直接將這個單維數組傳遞給glBufferData函數後(因爲glBufferData在接收單維數組時沒有問題)。我會重複這個每個多邊形有效地遍歷我的整個二維數組,並通過多邊形將函數數據傳遞到glBufferData多邊形。我知道我將不得不把每個多邊形放在一個單獨的頂點緩衝區中,不需要提醒我。我只需要知道是否可以傳入我的二維數組的一部分!
有沒有更容易和更有效的方式來做到這一點。
您可以傳遞1行的二維數組並給出其中的一個索引 –
我很困惑,您在實際上沒有使用任何C++時如何標記此C++。除了可以在任何地方定義變量的能力,但即使這是合法的C99。我不是在談論你選擇的文件IO API。 –
glBufferData(GL_ARRAY_BUFFER,sizeof(polygondata [0]),polygondata [0],GL_STATIC_DRAW); < - 那樣? – agusterodin