Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // in srcs amount of polygons must be same, polygons must be of same dots
- bool drawTwining(std::vector<EllipticParabola> &srcs, GLfloat p) {
- if (srcs.size() != 4 || p < 0 || p > 1) {
- return false;
- }
- glLineWidth(0.5f);
- glColorMaterial(GL_FRONT, GL_DIFFUSE);
- glEnable(GL_COLOR_MATERIAL);
- glPolygonMode(GL_FRONT_AND_BACK, cubeMode);
- GLfloat c0 = (1 - p)*(1 - p)*(1 - p);
- GLfloat c1 = 3 * p*(1 - p)*(1 - p);
- GLfloat c2 = 3 * p*p*(1 - p);
- GLfloat c3 = p*p*p;
- EllipticParabola t;
- EllipticParabola* ep = &t;
- ep->text_coords.clear();
- ep->text_coords.push_back(std::pair<GLfloat, GLfloat>(1.f, 1.f));
- ep->text_coords.push_back(std::pair<GLfloat, GLfloat>(0.f, 1.f));
- ep->text_coords.push_back(std::pair<GLfloat, GLfloat>(0.f, 0.f));
- ep->text_coords.push_back(std::pair<GLfloat, GLfloat>(1.f, 0.f));
- ep->texture = textures["VENUS"];
- glLineWidth(0.5f);
- glPolygonMode(GL_FRONT_AND_BACK, cubeMode);
- if (text_enabled) {
- glColorMaterial(GL_FRONT, GL_DIFFUSE);
- glEnable(GL_COLOR_MATERIAL);
- glBindTexture(GL_TEXTURE_2D, ep->texture);
- for (const std::vector<int>& pol : srcs[0].polygons) {
- int i = 0;
- glBegin(GL_POLYGON);
- i = 0;
- for (int ind : pol) {
- ind *= 3;
- glTexCoord2f(ep->text_coords[i].first, ep->text_coords[i].second);
- //glColor3f(ep->points_color[ind], ep->points_color[ind + 1], ep->points_color[ind + 2]);
- glNormal3f(c0*srcs[0].points_normal[ind] + c1*srcs[1].points_normal[ind] + c2*srcs[2].points_normal[ind] + c3*srcs[3].points_normal[ind],
- c0*srcs[0].points_normal[ind + 1] + c1*srcs[1].points_normal[ind + 1] + c2*srcs[2].points_normal[ind + 1] + c3*srcs[3].points_normal[ind + 1],
- c0*srcs[0].points_normal[ind + 2] + c1*srcs[1].points_normal[ind + 2] + c2*srcs[2].points_normal[ind + 2] + c3*srcs[3].points_normal[ind + 2]);
- glVertex3f(c0*srcs[0].points_pos[ind] + c1*srcs[1].points_pos[ind] + c2*srcs[2].points_pos[ind] + c3*srcs[3].points_pos[ind],
- c0*srcs[0].points_pos[ind + 1] + c1*srcs[1].points_pos[ind + 1] + c2*srcs[2].points_pos[ind + 1] + c3*srcs[3].points_pos[ind + 1],
- c0*srcs[0].points_pos[ind + 2] + c1*srcs[1].points_pos[ind + 2] + c2*srcs[2].points_pos[ind + 2] + c3*srcs[3].points_pos[ind + 2]);
- i++;
- }
- glEnd();
- }
- glBindTexture(GL_TEXTURE_2D, 0);
- }
- else {
- glColorMaterial(GL_FRONT, GL_DIFFUSE);
- glEnable(GL_COLOR_MATERIAL);
- for (const std::vector<int>& pol : srcs[0].polygons) {
- int i = 0;
- glBegin(GL_POLYGON);
- i = 0;
- for (int ind : pol) {
- ind *= 3;
- glTexCoord2f(ep->text_coords[i].first, ep->text_coords[i].second);
- glColor3f(c0*srcs[0].points_color[ind] + c1*srcs[1].points_color[ind] + c2*srcs[2].points_color[ind] + c3*srcs[3].points_color[ind],
- c0*srcs[0].points_color[ind + 1] + c1*srcs[1].points_color[ind + 1] + c2*srcs[2].points_color[ind + 1] + c3*srcs[3].points_color[ind + 1],
- c0*srcs[0].points_color[ind + 2] + c1*srcs[1].points_color[ind + 2] + c2*srcs[2].points_color[ind + 2] + c3*srcs[3].points_color[ind + 2]);
- glNormal3f(c0*srcs[0].points_normal[ind] + c1*srcs[1].points_normal[ind] + c2*srcs[2].points_normal[ind] + c3*srcs[3].points_normal[ind],
- c0*srcs[0].points_normal[ind + 1] + c1*srcs[1].points_normal[ind + 1] + c2*srcs[2].points_normal[ind + 1] + c3*srcs[3].points_normal[ind + 1],
- c0*srcs[0].points_normal[ind + 2] + c1*srcs[1].points_normal[ind + 2] + c2*srcs[2].points_normal[ind + 2] + c3*srcs[3].points_normal[ind + 2]);
- glVertex3f(c0*srcs[0].points_pos[ind] + c1*srcs[1].points_pos[ind] + c2*srcs[2].points_pos[ind] + c3*srcs[3].points_pos[ind],
- c0*srcs[0].points_pos[ind + 1] + c1*srcs[1].points_pos[ind + 1] + c2*srcs[2].points_pos[ind + 1] + c3*srcs[3].points_pos[ind + 1],
- c0*srcs[0].points_pos[ind + 2] + c1*srcs[1].points_pos[ind + 2] + c2*srcs[2].points_pos[ind + 2] + c3*srcs[3].points_pos[ind + 2]);
- i++;
- }
- glEnd();
- }
- }
- /*for (const std::vector<int>& pol : srcs[0].polygons) {
- glBegin(GL_POLYGON);
- for (int ind : pol) {
- ind *= 3;
- glColor3f(c0*srcs[0].points_color[ind] + c1*srcs[1].points_color[ind] + c2*srcs[2].points_color[ind] + c3*srcs[3].points_color[ind],
- c0*srcs[0].points_color[ind + 1] + c1*srcs[1].points_color[ind + 1] + c2*srcs[2].points_color[ind + 1] + c3*srcs[3].points_color[ind + 1],
- c0*srcs[0].points_color[ind + 2] + c1*srcs[1].points_color[ind + 2] + c2*srcs[2].points_color[ind + 2] + c3*srcs[3].points_color[ind + 2]);
- glNormal3f(c0*srcs[0].points_normal[ind] + c1*srcs[1].points_normal[ind] + c2*srcs[2].points_normal[ind] + c3*srcs[3].points_normal[ind],
- c0*srcs[0].points_normal[ind + 1] + c1*srcs[1].points_normal[ind + 1] + c2*srcs[2].points_normal[ind + 1] + c3*srcs[3].points_normal[ind + 1],
- c0*srcs[0].points_normal[ind + 2] + c1*srcs[1].points_normal[ind + 2] + c2*srcs[2].points_normal[ind + 2] + c3*srcs[3].points_normal[ind + 2]);
- glVertex3f(c0*srcs[0].points_pos[ind] + c1*srcs[1].points_pos[ind] + c2*srcs[2].points_pos[ind] + c3*srcs[3].points_pos[ind],
- c0*srcs[0].points_pos[ind + 1] + c1*srcs[1].points_pos[ind + 1] + c2*srcs[2].points_pos[ind + 1] + c3*srcs[3].points_pos[ind + 1],
- c0*srcs[0].points_pos[ind + 2] + c1*srcs[1].points_pos[ind + 2] + c2*srcs[2].points_pos[ind + 2] + c3*srcs[3].points_pos[ind + 2]);
- }
- glEnd();
- }*/
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement