add renderMaterial(), call glDrawElements()

This commit is contained in:
Josh Holtrop 2011-05-04 20:05:06 -04:00
parent aafacfb3f9
commit f3d9a3b437

View File

@ -22,6 +22,7 @@ private:
void initgl(); void initgl();
void display(); void display();
void setProjection(); void setProjection();
void renderMaterial(const WFObj::Material & m);
WFObj m_obj; WFObj m_obj;
GLuint m_list; GLuint m_list;
@ -127,6 +128,15 @@ void Viewer::display()
glTexCoordPointer(2, GL_FLOAT, stride, glTexCoordPointer(2, GL_FLOAT, stride,
(GLvoid *) m_obj.getTextureCoordOffset()); (GLvoid *) m_obj.getTextureCoordOffset());
} }
for (map<string, WFObj::Material>::iterator it = m_obj.getMaterials().begin();
it != m_obj.getMaterials().end();
it++)
{
renderMaterial(it->second);
glDrawElements(GL_TRIANGLES, it->second.num_vertices,
GL_UNSIGNED_SHORT,
(GLvoid *) (sizeof(GLushort) * it->second.first_vertex));
}
SDL_GL_SwapBuffers(); SDL_GL_SwapBuffers();
} }
@ -195,3 +205,19 @@ void Viewer::run()
} }
} }
} }
void Viewer::renderMaterial(const WFObj::Material & m)
{
if (m.flags & WFObj::Material::SHININESS_BIT)
glMaterialf(GL_FRONT, GL_SHININESS, m.shininess);
if (m.flags & WFObj::Material::AMBIENT_BIT)
glMaterialfv(GL_FRONT, GL_AMBIENT, &m.ambient[0]);
if (m.flags & WFObj::Material::DIFFUSE_BIT)
glMaterialfv(GL_FRONT, GL_DIFFUSE, &m.diffuse[0]);
if (m.flags & WFObj::Material::SPECULAR_BIT)
glMaterialfv(GL_FRONT, GL_SPECULAR, &m.specular[0]);
if (m.flags & WFObj::Material::TEXTURE_BIT)
{
cerr << "error: textured materials not implemented yet" << endl;
}
}