gpt4 book ai didi

c++ - OpenGL:将 VBO 与 std::vector 一起使用

转载 作者:太空狗 更新时间:2023-10-29 23:24:09 24 4
gpt4 key购买 nike

我正在尝试加载一个对象并使用 VBO 和 glDrawArrays() 来渲染它。问题是像 float f[]={...} 这样的简单浮点指针在我的例子中不起作用,因为我超过了这个指针可以存储的值的限制。所以我的解决方案是使用 vector 。而且它不起作用...

这是我的代码:

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() 上遇到问题,其中第三个参数是 const GLvoid *data。我正在传递 &vert 但它不起作用。

最佳答案

你想做的事:

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

阅读 documentation 总是好的.另外,我建议您挑选一本优秀的 C++ 书籍,这可能是您避免犯此类错误的好方法。

关于c++ - OpenGL:将 VBO 与 std::vector 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14234361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com