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 的第二个参数应该是sizeof(float) * 12.

您还需要使用gl*Pointer函数指定数组。您似乎使用 Vec3s 作为您的顶点,我相信默认值是 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的第二个参数

sizeof(datac)*12

编辑:根据评论更正

大小(浮点数)*12

于 2010-11-27T18:53:15.137 回答