2013-12-09 4 views
1

나는이 튜토리얼의 맨 아래에있는 코드를 사용하여 assimp를 사용하여 메쉬를로드합니다. Mesh LoadingOpenGL에서 vbo에 메시를 로딩하기

그래서 메쉬를로드 한 다음 첫 번째 메쉬를 vbo에로드 한 다음 vao에 연결합니다.

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

assimp (가) glDrawElementsBaseVertex + 렌더링 수행의 예를 보여줍니다. 첫 번째 VBO에 넣고 싶다면 두 VBO를 충분히 크게 만들어야합니다. –

답변

0

vao 기반 도면을 사용하는 경우 다른 vbos를 다른 vaos에 저장할 수 있습니다. 장면을 그릴 때, glBindVertexArray (vao)와 glBindVertexArray (0)를 사용하여 다른 vaos 사이를 이동합니다. 더 나은 솔루션도 있습니다. 하나의 바오 안에 여러 객체를 저장할 수 있지만 각 객체의 색인 데이터를 기록하십시오. 그런 다음 인덱스를 지정하여 glDrawElementsBaseVertex을 사용하여 각 객체를 그릴 수 있습니다.

이 튜토리얼은 당신이 다음 메시 또 다른 VBO를 생성하는 것, 일반적으로 http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html

+0

예 내 문제는 다음과 같이 메쉬를로드하는 것입니다 ... for (unsigned int m_i = 0; m_i < scene-> mNumMeshes; m_i ++) { const aiMesh * mesh = scene-> mMeshes [m_i]; g_point_count = mesh-> mNumVertices;if (mesh-> HasPositions()) { const aiVector3D * vp = & (mesh-> mVertices [v_i]);에 대한 에 대한 (부호없는 int v_i = 0; v_i < mesh-> mNumVertices; 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는 파일에 몇 개의 메쉬가 있는지 알려줍니다. 각 메쉬에 대해 색인을 기록 할 수 있습니다. (부호없는 int i = 0; i mMeshes [i] -> mMaterialIndex; meshes [i] .NumIndices = pScene-> mMeshes [i] -> mNumFaces * 3; meshes [i] .BaseVertex = numVertices; meshes [i] .BaseIndex = numIndices; numVertices + = pScene-> mMeshes [i] -> mNumVertices; numIndices + = meshes [i] .NumIndices; } –