Program Listing for File TexturedMesh.hpp

Return to documentation for file (include/lvr2/display/TexturedMesh.hpp)

/*
 * TexturedMesh.hpp
 *
 *  Created on: 14.04.2012
 *      Author: Thomas Wiemann
 */

#ifndef TEXTUREDMESH_HPP_
#define TEXTUREDMESH_HPP_

#include "lvr2/display/StaticMesh.hpp"
#include "lvr2/geometry/BaseVector.hpp"

namespace lvr2
{

using Vec = BaseVector<float>;

struct MaterialGroup
{
    int textureIndex;
    int numFaces;
    Vec color;
    vector<size_t> faceBuffer;
};

class TexturedMesh: public StaticMesh
{
public:
    TexturedMesh(MeshBufferPtr mesh);

    virtual ~TexturedMesh()
    {
        if (m_textures)
        {
            for (size_t i = 0; i < m_numTextures; i++)
            {
                delete m_textures[i];
            }

        }

        for (MaterialGroup *ptr : m_textureMaterials)
            delete ptr;

        for (MaterialGroup *ptr : m_colorMaterials)
            delete ptr;
    }

    virtual void render()
    {
        if(m_active)
        {
            if(m_finalized){
                glPushMatrix();
                glMultMatrixf(m_transformation.getData());
                if(m_renderMode & RenderSurfaces)
                {
                    //glEnable(GL_LIGHTING);
                    //glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
                    glCallList(m_textureDisplayList);
                }

                if(m_renderMode & RenderTriangles)
                {
                    glDisable(GL_LIGHTING);
                    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
                    glLineWidth(m_lineWidth);
                    glColor3f(0.0, 0.0, 0.0);
                    glCallList(m_wireframeList);
                    glEnable(GL_LIGHTING);
                }
                glPopMatrix();

            }

        }
    }


private:

    void generateMaterialGroups();
    void compileTexureDisplayList();
    void getBufferArray(unsigned int*, MaterialGroup* g);

    indexArray              m_faceMaterials;
    floatArr                m_texcoords;
    textureArr              m_textures;
    vector<Material>&       m_materials;


    vector<MaterialGroup*>  m_textureMaterials;
    vector<MaterialGroup*>  m_colorMaterials;

    size_t                  m_numFaces;
    size_t                  m_numMaterials;
    size_t                  m_numTextures;
    size_t                  m_numVertices;

    int                     m_textureDisplayList;
};

} /* namespace lvr2 */

#endif /* TEXTUREDMESH_HPP_ */