2

オブジェクトをロードし、VBO と glDrawArrays() を使用してレンダリングしようとしています。問題は、このポインターが格納できる値の制限を超えたため、私の場合のような単純な浮動小数点ポインターがfloat f[]={...}機能しないことです。したがって、私の解決策はベクトルを使用することでした。そして、それは機能していません...

これが私のコードです:

unsigned int vbo;
vector<float*> vert;

...
vert.push_back(new float(i*size));
vert.push_back(new float(height*h));
vert.push_back(new float(j*size));
...

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vert), &vert, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

そしてレンダリングする:

glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, 0);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, 0);

glBufferData()3番目のパラメーターがどこにあるかに問題がありますconst GLvoid *data。私は合格&vertしていますが、機能していません。

4

3 に答える 3

13

あなたがしたい:

unsigned int vbo;
vector<float> vert;

...
vert.push_back(i*size);
vert.push_back(height*h);
vert.push_back(j*size);
...

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vert.size() * sizeof(float), vert.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

ドキュメントを読むことは常に良いことです。また、良い C++ の本を手に取ることをお勧めします。これは、おそらく、このような間違いを避けるための良い方法です。

于 2013-01-09T11:39:14.857 に答える
5

vert.dataC++11 を使用しているか、コンパイルしないかを忘れずに確認してください。

std::vectorドキュメントを見ると、std::vector::data()C++11 でタグ付けされています。

http://www.cplusplus.com/reference/vector/vector/data/

C++11 を持っていない場合は、次のことができます。

unsigned int vbo;
vector<float> vert;

...
vert.push_back(i*size);
vert.push_back(height*h);
vert.push_back(j*size);
...

glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vert.size(), &vert[0], GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);

ベクトルの最初の要素への参照を取得すると、データ自体へのポインターが得られます。

于 2013-01-09T12:02:17.687 に答える
0

私は少し遅れているかもしれませんが、これについて助けが必要な人のために、データの先頭からポインタを取得する必要があります&vert.front().&vert[0]

したがって、次のようになります。

glBufferData(GL_ARRAY_BUFFER, vert.size() * sizeof(float), &vert.front(), GL_STATIC_DRAW);
于 2019-12-31T12:04:18.967 に答える