Guest User

Untitled

a guest
Apr 20th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.37 KB | None | 0 0
  1. void FillPlaneBar(Vector3f v1, Vector3f v2, Vector3f v3, Vector3f flatNorm, Vector3f v1norm, Vector3f v2norm, Vector3f v3norm) {
  2.  
  3.         //box boundary
  4.         float x1, x2, y1, y2, z1, z2;
  5.         x1 = v1[0] < v2[0] ? v1[0] : v2[0];
  6.         x1 = x1 < v3[0] ? x1 : v3[0];
  7.         x2 = v1[0] > v2[0] ? v1[0] : v2[0];
  8.         x2 = x2 > v3[0] ? x2 : v3[0];
  9.  
  10.         y1 = v1[1] < v2[1] ? v1[1] : v2[1];
  11.         y1 = y1 < v3[1] ? y1 : v3[1];
  12.         y2 = v1[1] > v2[1] ? v1[1] : v2[1];
  13.         y2 = y2 > v3[1] ? y2 : v3[1];
  14.  
  15.  
  16.         glBegin(GL_POINTS);
  17.         for (int y = y1; y <= y2; y++)
  18.             for (int x = x1; x <= x2; x++) {
  19.                 float alpha, beta, gama;
  20.                 alpha = ((v2[1] - v3[1]) * (x - v3[0]) + (v3[0] - v2[0]) * (y
  21.                         - v3[1])) / ((v2[1] - v3[1]) * (v1[0] - v3[0]) + (v3[0]
  22.                         - v2[0]) * (v1[1] - v3[1]));
  23.                 beta = ((v3[1] - v1[1]) * (x - v3[0]) + (v1[0] - v3[0]) * (y
  24.                         - v3[1])) / ((v2[1] - v3[1]) * (v1[0] - v3[0]) + (v3[0]
  25.                         - v2[0]) * (v1[1] - v3[1]));
  26.                 gama = 1 - alpha - beta;
  27.                 int depth = (alpha * v1[2] + beta * v2[2] + gama * v3[2]);
  28.  
  29.                 if ((alpha > 0) && (beta > 0) && (gama > 0) && (alpha < 1)
  30.                         && (beta < 1) && (gama < 1)) {
  31.                     if(shadingT == "P"){
  32.                         Vector3f interNorm = Vector3f(  v1norm[0] * alpha + v2norm[0] * beta + v3norm[0] * gama,
  33.                                                         v1norm[1] * alpha + v2norm[1] * beta + v3norm[1] * gama,
  34.                                                         v1norm[2] * alpha + v2norm[2] * beta + v3norm[2] * gama);
  35.                         interNorm /= interNorm.len();
  36.  
  37.                         float dotinl = interNorm[0] * light[0] + interNorm[1]* light[1] + interNorm[2] * light[2];
  38.                         Vector3f reflect =(interNorm * 2 * (light[0] * interNorm[0] + light[1] * interNorm[1] + light[2] * interNorm[2])) - light;
  39.                         reflect /= reflect.len();
  40.                         float dotcr = camera[0] * reflect[0] + camera[1] * reflect[1] + camera[2] + reflect[2];
  41.                         intensity += (kd*dotinl + ks*pow(dotcr,50));
  42.                         putColorPoint(x, y, depth, intensity);
  43.                         intensity = 0.15;
  44.                     }
  45.  
  46.                     if (shadingT == "F"){
  47.                         float dotfnl = flatNorm[0] * light[0] + flatNorm[1]* light[1] + flatNorm[2] * light[2];
  48.                         Vector3f reflect = flatNorm * 2 * (light[0] * flatNorm[0] + light[1] * flatNorm[1] + light[2] * flatNorm[2]) - light;
  49.                         reflect /= reflect.len();
  50.                         float dotcr = camera[0] * reflect[0] + camera[1] * reflect[1] + camera[2] + reflect[2];
  51.                         intensity += (kd*dotfnl + ks*pow(dotcr,50));
  52.                         putColorPoint(x, y, depth, intensity);
  53.                         intensity = 0.15;
  54.                     }
  55.                     if (shadingT == "G") {
  56.                         float dotv1nl = v1norm[0] * light[0] + v1norm[1] * light[1] + v1norm[2] * light[2];
  57.                         float dotv2nl = v2norm[0] * light[0] + v2norm[1] * light[1] + v2norm[2] * light[2];
  58.                         float dotv3nl = v3norm[0] * light[0] + v3norm[1] * light[1] + v3norm[2] * light[2];
  59.                         Vector3f reflect = flatNorm * 2 * (light[0] * flatNorm[0] + light[1] * flatNorm[1] + light[2] * flatNorm[2]) - light;
  60.                         reflect /= reflect.len();
  61.                         float dotcr = camera[0] * reflect[0] + camera[1] * reflect[1] + camera[2] + reflect[2];
  62.  
  63.                         intensity1 += ((kd*dotv1nl) +(ks*pow(dotcr, 50)));
  64.                         intensity2 += ((kd*dotv2nl) +(ks*pow(dotcr, 50)));
  65.                         intensity3 += ((kd*dotv3nl) +(ks*pow(dotcr, 50)));
  66.                         float shading = alpha * intensity1 + beta * intensity2+ gama * intensity3;
  67.                         putColorPoint(x, y, depth, shading);
  68.                         intensity1 = intensity2 = intensity3 = 0.15;
  69.                     }
  70.                     if (shadingT == "N"){
  71.                         putColorPoint(x, y, depth, 1);
  72.                     }
  73.                 }
  74.             }
  75.  
  76.         glEnd();
  77.     }
Add Comment
Please, Sign In to add comment