I've been working on loading some models and so far it's going alright, got me a nice model and everything seems to be working fine, except that I'm rather clueless on how to texture it properly.
I'm working with VBOs and I load my stuff from an .obj file. Just like the vertices, I need to draw UVs with the indices provided, but I don't know how to process them properly with opengl. I tried to do it the same way with just creating another IBO for the UVs, but I don't know if this is the right way and if it is, where to put it (as my model is simply black, it seems to fail).
I checked with GDebugger and the texture seems to be there and I also enabled it with glEnable( GL_TEXTURE_2D );
Any pointers in the right direction would be appreciated. This is what I have so far:
Rld::Mesh::Mesh( String a_FileName, String a_Name )
{
testtexid = SOIL_load_OGL_texture("Data/diffuseF.png", SOIL_LOAD_AUTO, SOIL_CREATE_NEW_ID, SOIL_FLAG_MIPMAPS);
m_Name = a_Name;
Load(a_FileName);
glGenBuffers(1, &m_VertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(float3) * m_Vertices.size(), &m_Vertices[0], GL_STATIC_DRAW);
glGenBuffers(1, &m_UVBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_UVBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(float2) * m_UVs.size(), &m_UVs[0], GL_STATIC_DRAW);
glGenBuffers(1, &m_NormalBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_NormalBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(float3) * m_Normals.size(), &m_Normals[0], GL_STATIC_DRAW);
glGenBuffers(1, &m_IndexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_IndexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * m_Indices.size(), &m_Indices[0], GL_STATIC_DRAW);
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
}
void Rld::Mesh::Render()
{
glColor3f(1.0f, 0.0f, 0.0f);
glEnable( GL_TEXTURE_2D );
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, m_VertexBuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
//How do I process this with an index buffer?
glEnableVertexAttribArray(1);
glBindBuffer( GL_ARRAY_BUFFER, m_UVBuffer );
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(2);
glBindBuffer( GL_ARRAY_BUFFER, m_NormalBuffer );
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, m_IndexBuffer );
glDrawElements( GL_TRIANGLES, m_Indices.size(), GL_UNSIGNED_INT, 0 );
glDisableVertexAttribArray(2);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(0);
glBindBuffer( GL_ARRAY_BUFFER, 0 );
glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, 0 );
glBindTexture( GL_TEXTURE_2D, 0 );
}






