gpt4 book ai didi

c++ - VBO什么都不画

转载 作者:太空宇宙 更新时间:2023-11-04 16:15:42 24 4
gpt4 key购买 nike

我正在尝试使用 VBO 呈现我存储的数据。然而,实际上并没有渲染任何东西,尽管 glGetError() 没有抛出任何错误;

void Model::initDrawing()
{
glewInit();

glGenBuffers(1, &_bufferID);
glBindBuffer(GL_ARRAY_BUFFER, _bufferID);

const GLsizeiptr vertex_size = sizeof(_modelMesh->vertices);
const GLsizeiptr normal_size = sizeof(_modelMesh->vertices);
glBufferData(GL_ARRAY_BUFFER, vertex_size+normal_size, 0, GL_STATIC_DRAW);


GLvoid * vbo_buffer = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
memcpy(vbo_buffer, &_modelMesh->vertices[0], vertex_size);
vbo_buffer += vertex_size;
memcpy(vbo_buffer, &_modelMesh->normals[0], normal_size);
glUnmapBuffer(GL_ARRAY_BUFFER);

glVertexPointer(4, GL_FLOAT, 0, (GLvoid*)((char*)NULL));
glNormalPointer(GL_FLOAT, 0, (GLvoid*)((char*)NULL+vertex_size));
}

void Model::draw()
{
glBindBuffer(GL_ARRAY_BUFFER, _bufferID);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glDrawElements(GL_TRIANGLE_STRIP, _modelMesh->vertices.size(), GL_UNSIGNED_INT, (GLvoid*)((char*)NULL));

GLenum err;
while ((err = glGetError()) != GL_NO_ERROR)
{
cerr << "OpenGL error: " << err << endl;
}
}

其中 Mesh *_modelMesh 由(除​​其他外)组成:

std::vector<Vertex4f> vertices;
std::vector<Normal3f> normals;

它们只是 GLfloat 类型的 vector :

typedef struct _vertex4f {
Vertex3f vertex;
GLfloat weight;
} Vertex4f;
typedef struct _vertex3f {
GLfloat x, y, z;
} Vertex3f;

定义 vector 和法线是否足以进行绘图?

我在渲染时也使用了光。

最佳答案

一方面,您的位置和法线大小不正确。

它们的大小应该类似于 _modelMesh->vertices.size () * sizeof (GLfloat) * 4_modelMesh->normals.size () * sizeof (GLfloat) * 3分别。它们的大小不同。

您也不想使用 sizeof (_modelMesh->vertices) ,因为 vertices是一个模板化容器。这不会给你它包含的元素的大小,只是实例化的大小 std::vector <Vertex4f>对象(可能是几个指针)。

最后,我在这段代码中没有看到任何地方将任何内容绑定(bind)到 GL_ELEMENT_ARRAY_BUFFER .

同样,glBindBuffer(GL_ARRAY_BUFFER, _bufferID);Model::draw (...) 中没有必要,因为唯一一次绑定(bind)到 GL_ARRAY_BUFFER 的东西重要的是你什么时候打电话gl...Pointer (...) .从那时起,如果有任何内容绑定(bind)到GL_ARRAY_BUFFER,那么什么都没有关系。 ;它的唯一目的是告诉 Pointer 命令指针相对于哪个缓冲区的内存。

关于c++ - VBO什么都不画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970598/

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