From f3d9a3b437723b9ce50d46eed4c836d8ce583c2c Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 4 May 2011 20:05:06 -0400 Subject: [PATCH] add renderMaterial(), call glDrawElements() --- wfobj-view.cc | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/wfobj-view.cc b/wfobj-view.cc index e4fa19a..ace16ec 100644 --- a/wfobj-view.cc +++ b/wfobj-view.cc @@ -22,6 +22,7 @@ private: void initgl(); void display(); void setProjection(); + void renderMaterial(const WFObj::Material & m); WFObj m_obj; GLuint m_list; @@ -127,6 +128,15 @@ void Viewer::display() glTexCoordPointer(2, GL_FLOAT, stride, (GLvoid *) m_obj.getTextureCoordOffset()); } + for (map::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(); } @@ -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; + } +}