2013-12-09 3 views
1

Я использую код в нижней части этого руководства, чтобы загружать сетки с помощью апельсина. Mesh LoadingЗагрузка ячеек в противовес vbo в opengl

Так что я загружаю сетки, а затем загружаю первый в vbo, а затем связываю их с вао.

glGenVertexArrays(1, &_vertexArray1); //Bind to first VAO 
glBindVertexArray(_vertexArray1); 
glGenBuffers(1, &_vertexBufferCube1); 
glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferCube1); 
glBufferData(GL_ARRAY_BUFFER, g_point_count * 3 * sizeof (float), &g_vp[0], GL_STATIC_DRAW); 

glEnableVertexAttribArray(loc1); 
glVertexAttribPointer(loc1, 3, GL_FLOAT, GL_FALSE, 0, NULL); 
glEnableVertexAttribArray(loc2); 
glVertexAttribPointer(loc2, 3, GL_FLOAT, GL_FALSE, 0, NULL); 

Но как я могу загрузить вторую сетку в vbo? Как и следовало ожидать, вторая сетка должна быть в g_vp[g_point_count * 3 * sizeof (float)]? Потому что я пробовал это, и он не работает, но возможно, что-то еще не так.

+0

Как правило, вы бы создать другой VBO для следующей сетки. Если вы действительно хотите перенести его в первый VBO, вам нужно будет сделать это VBO достаточно большим для обоих. –

ответ

0

Если вы используете чертеж на основе vao, вы можете хранить разные vbos в разных vaos. Когда вы рисуете сцену, используйте glBindVertexArray (vao) и glBindVertexArray (0) для размаха между различными ваасами. Есть и более эффективные решения. Вы можете хранить несколько объектов в одном vao, но записывать индексные данные каждого объекта. Затем вы можете нарисовать каждый объект, используя glDrawElementsBaseVertex, указав индекс.

Этот учебник показывает пример делать рендер с glDrawElementsBaseVertex + assimp http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html

+0

Да моя проблема заключается в том, что я загружаю мои сетки, как это ... 'для (без знака Int m_i = 0; M_i < scene-> mNumMeshes; m_i ++) { Const aiMesh * сетка = scene-> mMeshes [m_i]; g_point_count = mesh-> mNumVertices; for (unsigned int v_i = 0; v_i < mesh-> mNumVertices; v_i ++) { if (mesh-> HasPositions()) { const aiVector3D * vp = & (mesh-> mVertices [v_i]); printf ("vp% i (% f,% f,% f) \ n", v_i, vp-> x, vp-> y, vp-> z); g_vp.push_back (vp-> x); ' Какой код я скопировал из учебника, и мне интересно, как именно я могу получить доступ ко второй сетке, загруженной в g_vp? – user3083755

+0

scene-> mNumMeshes рассказывает вам, сколько ячеек находится в файле. Для каждой сетки вы можете записать индекс. for (unsigned int i = 0; i mMeshes [i] -> mMaterialIndex; сетки [i] .NumIndices = pScene-> mMeshes [i] -> mNumFaces * 3; сетки [i] .BaseVertex = numVertices; сетки [i] .BaseIndex = numIndices; numVertices + = pScene-> mMeshes [i] -> mNumVertices; numIndices + = meshes [i] .NumIndices; } –