2

描画する位置の配列を作成していますが、配列に dma を使用しているときにスタックします

配列のサイズを宣言して入力すると、動作させることができますが、そうすると


float *datac;
datac=NULL;
datac = new float[12];

datac[0] = 0;datac[1] = 0;datac[2] = 0;
datac[3] = 0;datac[4] = 100;datac[5] = 0;
datac[6] = 100;datac[7] = 100;datac[8] = 0;
datac[9] = 100;datac[10] = 0;datac[11] = 0;

//how do I pass it through to these functions
//this is what I was using when I done float datac[12] = ....
//I have tried using this sizeof(*datac)*sizeof(float)
//which compiles but just does not draw

glBufferData(GL_ARRAY_BUFFER, sizeof(datac), datac, GL_STATIC_DRAW);
glDrawArrays(GL_QUADS, 0, sizeof(datac)/ sizeof(float) / 3);

鈍くて、何をする必要があるのか​​ 考えられない

4

3 に答える 3

2

これは C++ であるため、std::vector簡単に使用できます。

std::vector<float> datac(12);

datac[0] = 0;datac[1] = 0;datac[2] = 0;
datac[3] = 0;datac[4] = 100;datac[5] = 0;
datac[6] = 100;datac[7] = 100;datac[8] = 0;
datac[9] = 100;datac[10] = 0;datac[11] = 0;

glBufferData(GL_ARRAY_BUFFER, datac.size()*sizeof(float), &datac[0], GL_STATIC_DRAW);
// glVertexPointer in GL2 or glAttribPointer in GL3 comes here
glDrawArrays(GL_QUADS, 0, datac.size() / 3);
于 2010-11-27T19:30:16.830 に答える
1

glBufferData の 2 番目のパラメーターはsizeof(float) * 12.

関数で配列を指定する必要もありますgl*Pointer。頂点に Vec3 を使用しているようですが、デフォルトは Vec4 だと思います。例えば:

GLuint VertexBuf;
glGenBuffers(1, &VertexBuf);
glBindBuffer(GL_ARRAY_BUFFER, VertexBuf);
glBufferData(GL_ARRAY_BUFFER, sizeof(float)*12, datac, GL_STATIC_DRAW);
glVertexPointer(3, GL_FLOAT, 0, 0);

glDrawArrays(GL_QUADS, 0, sizeof(float) * (12 / 3));
于 2010-11-27T19:29:46.370 に答える
0

うーん.. glBufferData への 2 番目のパラメーターです。

sizeof(datac)*12

編集:コメントごとに修正

sizeof(float)*12

于 2010-11-27T18:53:15.137 に答える