//------------------------------------------------------------------------------ // drawFunc() //------------------------------------------------------------------------------ void Polygon::drawFunc() { BEGIN_DLIST unsigned int nv = getNumberOfVertices(); const osg::Vec3* vertices = getVertices(); if (nv >= 2) { // Draw with texture unsigned int ntc = getNumberOfTextureCoords(); if (ntc > 0 && hasTexture()) { const osg::Vec2* texCoord = getTextureCoord(); unsigned int tc = 0; // texture count glBegin(GL_POLYGON); for (unsigned int i = 0; i < nv; i++) { if (tc < ntc) { lcTexCoord2v(texCoord[tc++].ptr()); } lcVertex3v( vertices[i].ptr() ); } glEnd(); } // Draw without texture else { // get our color gradient, because if we have one, instead of a regular color, we will // override it here and set it on a per vertex level. ColorGradient* colGradient = dynamic_cast<ColorGradient*>(getColor()); glBegin(GL_POLYGON); osg::Vec3* ptr = nullptr; for (unsigned int i = 0; i < nv; i++) { if (colGradient != nullptr) { Basic::Color* col = colGradient->getColorByIdx(i+1); if (col != nullptr) glColor4f(static_cast<GLfloat>(col->red()), static_cast<GLfloat>(col->green()), static_cast<GLfloat>(col->blue()), static_cast<GLfloat>(col->alpha())); } // if we have a material name, we will set up like we have a material if (getMaterialName() != nullptr) { //lcVertex3v( vertices[i].ptr() ); ptr = const_cast<osg::Vec3*>(reinterpret_cast<const osg::Vec3*>(vertices[i].ptr())); if (ptr != nullptr) { calcNormal(); lcNormal3(norm.x(), norm.y(), -(norm.z())); lcVertex3(ptr->x(), ptr->y(), ptr->z()); } } else { lcVertex3v(vertices[i].ptr()); } } glEnd(); } } END_DLIST }
// Draw function void Quad::drawFunc() { bool ok = false; // Draw with texture const unsigned int nv = getNumberOfVertices(); if (nv > 3) { if (!strip) { int rem = nv % 4; if (rem != 0) std::cerr << "Quad::drawFunc() - Quad have to have multiple of 4 vertices, add or remove vertices!!" << std::endl; else { BEGIN_DLIST glBegin(GL_QUADS); ok = true; } } else { int rem = nv % 2; if (rem != 0) std::cerr << "Quad::drawFunc() - quad strips have to have multiple of 2 vertices, add or remove vertices!!" << std::endl; else { BEGIN_DLIST glBegin(GL_QUAD_STRIP); ok = true; } } if (ok) { // get our regular vertices here const osg::Vec3* v = getVertices(); const unsigned int ntc = getNumberOfTextureCoords(); // draw with texture if (ntc > 0 && hasTexture()) { const osg::Vec2* texCoord = getTextureCoord(); unsigned int tc = 0; // texture count for (unsigned int i = 0; i < nv; i++) { // add our textures coordinates if (tc < ntc) lcTexCoord2v(texCoord[tc++].ptr()); // now our vertices lcVertex3v( v[i].ptr() ); } } // draw without texture else { // get our color gradient and apply it (if we have one) ColorGradient* colGradient = dynamic_cast<ColorGradient*>(getColor()); for (unsigned int i = 0; i < nv; i++) { if (colGradient != nullptr) { Basic::Color* col = colGradient->getColorByIdx(i+1); if (col != nullptr) glColor4f(static_cast<GLfloat>(col->red()), static_cast<GLfloat>(col->green()), static_cast<GLfloat>(col->blue()), static_cast<GLfloat>(col->alpha())); } // now add our vertex lcVertex3v( v[i].ptr() ); } } glEnd(); END_DLIST } } else std::cerr << "Quad::drawFunc() - Quad or QuadStrip needs at least 4 vertices!" << std::endl;