StaticMesh::StaticMesh(const StaticMesh &o) { if( m_faceNormals != 0 ) { delete[] m_faceNormals; } m_faceNormals = new float[3 * o.m_numVertices]; m_vertices = floatArr( new float[3 * o.m_numVertices] ); m_colors = ucharArr( new unsigned char[3 * o.m_numVertices] ); m_faces = uintArr( new unsigned int[3 * o.m_numFaces] ); for ( size_t i(0); i < 3 * o.m_numVertices; i++ ) { m_faceNormals[i] = o.m_faceNormals[i]; m_vertices[i] = o.m_vertices[i]; m_colors[i] = o.m_colors[i]; } for( size_t i = 0; i < 3 * o.m_numFaces; ++i ) { m_faces[i] = o.m_faces[i]; } m_boundingBox = o.m_boundingBox; m_model = o.m_model; }
void MeshBuffer::setVertexColorArray(std::vector<uint8_t>& array) { m_vertexColors = ucharArr(new uchar[array.size()]); for (int i(0); i < array.size(); i++) { m_vertexColors[i] = array[i]; } m_numVertexColors = array.size() / 3; }
void StaticMesh::init( MeshBufferPtr mesh ) { size_t n_colors; size_t n_normals; m_lineWidth = 2.0; if(mesh) { m_faceNormals = 0; m_normals = mesh->getVertexNormalArray(n_normals); m_colors = mesh->getVertexColorArray(n_colors); m_vertices = mesh->getVertexArray(m_numVertices); m_faces = mesh->getFaceArray(m_numFaces); m_blackColors = new unsigned char[ 3 * m_numVertices ]; for ( size_t i = 0; i < 3 * m_numVertices; i++ ) { m_blackColors[i] = 0; } m_finalized = true; m_visible = true; m_active = true; m_renderMode = 0; m_renderMode |= RenderSurfaces; m_renderMode |= RenderTriangles; m_boundingBox = new BoundingBox<Vertex<float> >; if(!m_faceNormals) { interpolateNormals(); } else { // cout << "Face normals: " << m_faceNormals << endl; } if(!m_colors) { setDefaultColors(); } if(n_colors == 0) { m_colors = ucharArr( new unsigned char[3 * m_numVertices] ); for( int i = 0; i < m_numVertices; ++i ) { m_colors[3 * i] = 0; m_colors[3 * i + 1] = 255; m_colors[3 * i + 2] = 0; } } } }
void StaticMesh::setDefaultColors() { m_colors = ucharArr( new unsigned char[3 * m_numVertices] ); for(size_t i = 0; i < m_numVertices; i++) { m_colors[i] = 0; m_colors[i + 1] = 255; m_colors[i + 2] = 0; } }
void MeshBuffer::setFaceColorArray( std::vector<uchar> &array ) { m_faceColors = ucharArr( new uchar[array.size()] ); for ( int i(0); i < array.size(); i++ ) { m_faceColors[i] = array[i]; } m_numFaceColors = array.size() / 3; }