RegularPolygonObject::RegularPolygonObject(SceneMain* parentScene, ShaderProgram* program, vec3f pos, vec3f scale, unsigned int sides) : GameObject(parentScene, pos, scale) { std::vector<Vertex::Element> elements; elements.push_back(Vertex::Element(Vertex::Attribute::Position , Vertex::Element::Float, 3)); elements.push_back(Vertex::Element(Vertex::Attribute::Color , Vertex::Element::Float, 3)); Vertex::Format format(elements); Mesh* mesh = new Mesh(format,0,false); struct Vertex { Vertex(vec3f pos, vec3f color) : pos(pos) , color(color) {} vec3f pos, color; }; float angle = 0; float angleStep = 2.0 * M_PI * 1.0f / sides; std::vector<Vertex> data; for (unsigned int i = 0; i < sides; ++i) { data.push_back(Vertex(vec3f(0.0, 0.0, 0.0), vec3f(1.0, 1.0, 1.0))); data.push_back(Vertex(vec3f(std::cos(angle), std::sin(angle),0.0), HuetoRGB(angle))); angle += angleStep; data.push_back(Vertex(vec3f(std::cos(angle), std::sin(angle),0.0), HuetoRGB(angle))); } mesh->setVertexData(&data[0],data.size()); poly.mesh = mesh; if (program == NULL) poly.program = parentScene->shaderColor; else poly.program = program; }
void HLStoRGB( double H, double L, double S, COLOR& c) { double m1, m2; if(S==0) { c.r=c.g=c.b=(float)L; } else { if(L <=0.5) { m2 = L*(1.0+S); } else { m2 = L+S-L*S; } m1 = 2.0*L-m2; c.r = (float)HuetoRGB(m1,m2,(H+1.0/3.0)); c.g = (float)HuetoRGB(m1,m2,H); c.b = (float)HuetoRGB(m1,m2,H-1.0/3.0); } }
Drawing::Color CPowerColorPickerCtrl::HLStoRGB( double H, double L, double S ) { double r,g,b; double m1, m2; if(S==0) { r=g=b=L; } else { if(L <=0.5) m2 = L*(1.0+S); else m2 = L+S-L*S; m1 = 2.0*L-m2; r = HuetoRGB(m1,m2,H+1.0/3.0); g = HuetoRGB(m1,m2,H); b = HuetoRGB(m1,m2,H-1.0/3.0); } if( r > 1.0f ) r = 1.0f; if( r < 0.0f ) r = 0.0f; if( g > 1.0f ) g = 1.0f; if( g < 0.0f ) g = 0.0f; if( b > 1.0f ) b = 1.0f; if( b < 0.0f ) b = 0.0f; Drawing::Color color = Color::FromArgb((int)(r*255), (int)(g*255), (int)(b*255)); return color; }