2010-11-27 16 views
2

私は描画する位置の配列を作成していると私は、配列OpenGLのVBO DMA配列

の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); 

を行うと、私は

答えて

2

それは、C++です:

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); 
+0

ありがとう、ちょうどstd :: vectorになる –

0

を行うために必要なものだと思うカントうーん... glBufferData

sizeof(datac)*12 
の2番目のパラメータであります

編集:コメント

はsizeof(フロート)* 12

+0

私が掲示が、後に、私は配列のものになるかどうか、大きな分からないことに気づきました。配列の長さを取得する安全な方法は何ですか? –

+0

あなたはある時点でデータを正しく割り当てていますか?だから、あなたはdatac = new float [*] – Naveen

+0

WOWで新しいものに渡すものと同じ配列のサイズを知っていなければなりません。ありがとう。 –

1

ごとに修正glBufferDataへの2番目のパラメータがsizeof(float) * 12する必要があります。

また、配列をgl*Pointer関数で指定する必要があります。頂点にVec3を使用しているようですが、デフォルトはVec4です。たとえば:あなたはstd::vectorを使用して、あなたの人生を簡単に作ることができるように

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));