daily pastebin goal
42%
SHARE
TWEET

Untitled

a guest Jul 21st, 2018 62 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Triangle: public Object
  2. {
  3. public:
  4.     point v1,v2,v3;
  5.     Triangle(point a, point b, point c)
  6.     {
  7.         v1.x=a.x;
  8.         v1.y=a.y;
  9.         v1.z=a.z;
  10.         v2.x=b.x;
  11.         v2.y=b.y;
  12.         v2.z=b.z;
  13.         v3.x=c.x;
  14.         v3.y=c.y;
  15.         v3.z=c.z;
  16.     }
  17.  
  18.     void draw()
  19.     {
  20.         //cout<<"hi";
  21.         glColor3f(color[0],color[1],color[2]);
  22.  
  23.             //glTranslatef(10.0,10.0,0.0);
  24.             //glPushMatrix();
  25.             //{
  26.                 glBegin(GL_TRIANGLES);
  27.                 {
  28.                     glVertex3f(v1.x,v1.y,v1.z);
  29.                     glVertex3f(v2.x,v2.y,v2.z);
  30.                     glVertex3f(v3.x,v3.y,v3.z);
  31.                 }
  32.                 glEnd();
  33.             //}
  34.             //glPopMatrix();
  35.  
  36.             //glTranslatef(-10.0,-10.0,0.0);
  37.  
  38.  
  39.     }
  40.  
  41.  
  42.     point getNormal(point section)
  43.     {
  44.         //cout<<"here came???"<<endl;
  45.         //double *equation=new double[4];
  46.         //int j,k,l,m,a,b,c,d;
  47.  
  48.         point pv1;
  49.         point pv2;
  50.         pv1=minusthem(v2,v1);
  51.         pv2=minusthem(v3,v1);
  52. /*
  53.         pv1.x=v2.x-v1.x;
  54.         pv1.y=v2.y-v1.y;
  55.         pv1.z=v2.z-v1.z;
  56.  
  57.  
  58.         pv2.x=v3.x-v1.x;
  59.         pv2.y=v3.y-v1.y;
  60.         pv2.z=v3.z-v1.z;
  61.         */
  62.         //cout<<v1.x<<","<<v1.y<<","<<v1.z<<","<<v2.x<<","<<v2.y<<","<<v2.z<<","<<v3.x<<","<<v3.y<<","<<v3.z<<endl;
  63.         //cout<<pv1.x<<","<<pv1.y<<","<<pv1.z<<","<<pv2.x<<","<<pv2.y<<","<<pv2.z<<endl;
  64.  
  65.         point normal;
  66.  
  67.         normal.x=pv1.y*pv2.z - pv1.z*pv2.y;
  68.         normal.y=pv1.z*pv2.x - pv1.x*pv2.z;
  69.         normal.z=pv1.x*pv2.y - pv1.y*pv2.x;
  70.  
  71.         //double norm=normal.x*normal.x+normal.y*normal.y+normal.z*normal.z;
  72.         //cout<<normal.x<<","<<normal.y<<","<<normal.z<<endl;
  73.         //normalize(normal);
  74.         //cout<<normal.x<<","<<normal.y<<","<<normal.z<<endl;
  75.         normalize(normal);
  76.         if(dotmul(normal,section)>0)
  77.             multiply(-1.0,normal);
  78.         return normal;
  79.         //equation[3]=(-1.0)*(normal.x*v1.x + normal.y*v1.y + normal.z*v1.z);
  80.  
  81.  
  82.  
  83.  
  84.     }
  85.  
  86.  
  87.     double getIntersectingT(Ray ray)
  88.     {
  89.         /*
  90.         point normal=getNormal(ray.start);
  91.         double norm=normal.x*normal.x+normal.y*normal.y+normal.z*normal.z;
  92.         if(norm>-0.0000001 && norm<0.0000001) return -1;
  93.         //norm=sqrt(norm);
  94.         double d=(-1.0)*(normal.x*v1.x + normal.y*v1.y + normal.z*v1.z);
  95.         d=d/sqrt(norm);
  96.  
  97.         normalize(normal);
  98.         point p1;
  99.         p1.x=v1.x;
  100.         p1.y=v1.y;
  101.         p1.z=v1.z;
  102.         normalize(p1);
  103.         //double d=(-1.0)*(normal.x*p1.x + normal.y*p1.y + normal.z*p1.z);
  104.         double t=dotmul(normal,ray.start);
  105.         t=t+d;
  106.         t=-t;
  107.         t=t/dotmul(normal, ray.direction);
  108.         return t;
  109.         */
  110.  
  111.         point edge1 = minusthem(v2,v1);
  112.         point edge2 = minusthem(v3,v1);
  113.  
  114.         point h = crossmul(ray.direction, edge2);
  115.         double a = dotmul(edge1, h);
  116.  
  117.         if(a > -0.0000001 && a < 0.0000001)
  118.         {
  119.             return -1;
  120.         }
  121.  
  122.         double f=1.0 / a;
  123.  
  124.         point s = minusthem(ray.start,v1);
  125.  
  126.         double u = f * dotmul(s, h);
  127.  
  128.         if(u<0 || u>1)
  129.         {
  130.             return -1;
  131.         }
  132.  
  133.         point q = crossmul(s,edge1);
  134.  
  135.         double v = f* dotmul(ray.direction,q);
  136.  
  137.         if(v<0 || u+v>1)
  138.         {
  139.             return -1;
  140.         }
  141.  
  142.         double t = f * dotmul(edge2,q);
  143.  
  144.         if(t > 0.0000001)
  145.         {
  146.             return t;
  147.         }
  148.  
  149.         return -1;
  150.  
  151.  
  152.     }
  153.  
  154.  
  155.     double intersect(Ray rr, double *current_color, int level)
  156.     {
  157.         int i,j,k;
  158.  
  159.         double t_min=getIntersectingT(rr);
  160.         if(t_min<=0)return -1;
  161.         if(level==0)
  162.             return t_min;
  163.  
  164.         point intersectionpoint = plusthem(rr.start,multiply(t_min,rr.direction));
  165.         point normal=getNormal(rr.direction);
  166.         point reflected_vector=getReflection(rr,normal,0);
  167.         ///point refracted_vector=getRefraction(rr,normal,0,eta);/// //////////////
  168.         current_color[0] = color[0] * co_efficients[0];
  169.         current_color[1] = color[1] * co_efficients[0];
  170.         current_color[2] = color[2] * co_efficients[0];
  171.  
  172.  
  173.         //point normal=getNormal(intersectionpoint);
  174.         //normalize(normal);
  175.  
  176.  
  177.         for(i=0;i<lights.size();i++)
  178.         {
  179.             point direc=minusthem(lights[i], intersectionpoint);
  180.             normalize(direc);
  181.  
  182.             ///cout<<i<<", direc: "<<direc.x<<","<<direc.y<<","<<direc.z<<endl;
  183.  
  184.             point start=plusthem(intersectionpoint, direc);
  185.             ///cout<<"start: "<<start.x<<","<<start.y<<","<<start.z<<endl;
  186.             Ray L(start, direc);
  187.  
  188.             double colorarra[3];
  189.             /// distance between the light source & start point
  190.             point distance_light=minusthem(lights[i],start);
  191.             double distance_light_source=distance_light.x*distance_light.x+ distance_light.y*distance_light.y+distance_light.z*distance_light.z;
  192.             distance_light_source=sqrt(distance_light_source);
  193.             int flag=0;
  194.             for(j=0;j<objects.size();j++)/// bujhin a kichui :/
  195.             {
  196.                 double intersect=objects[j]->getIntersectingT(L);
  197.                 ///cout<<"objT "<<intersect<<endl;
  198.  
  199.  
  200.                 if(intersect>0 && intersect<=abs(distance_light_source))/// equal hobe? meaning ched korche
  201.                 {
  202.                     flag=1;
  203.                     break;
  204.                 }
  205.  
  206.             }
  207.  
  208.             if(flag==0)
  209.             {
  210.  
  211.                 double lambert=dotmul(L.direction, normal);
  212.                 //double phong=dotmul(L.direction, rr.direction);
  213.                 //double phong=pow(dotmul(reflected_vector, rr.direction),shine);
  214.                     //double phong=pow(dotmul(getReflection(L, normal,1), rr.direction),shine);/// power
  215.                 double phong=dotmul(getReflection(L, normal,1), multiply(-1.0,rr.direction));
  216.                     //cout<<"lambert: "<<lambert<< " phong "<<phong<<endl;
  217.                 ///
  218.                 ///
  219. /// why did we do that ???
  220.                 if(lambert<0) lambert=0;
  221.                 if(phong<0) phong=0;
  222.                 //cout<<"lambert: "<<lambert<< " phong "<<phong<<endl;
  223.  
  224.                 /// //////////////////////  :/
  225.                 current_color[0]+= lambert * co_efficients[1]* color[0];
  226.                 //cout<<"cc : "<<current_color[0]<<",";
  227.                 current_color[0] += pow(phong,shine) * co_efficients[2] * color[0];
  228.                 //current_color[0]=current_color[0]+phong*co_efficients[2]*objects[j]->color[0];
  229.                 ///cout<<"cc : "<<current_color[0]<<",  ";
  230.  
  231.  
  232.                 current_color[1]+= lambert * co_efficients[1] * color[1];
  233.                 ///cout<<"cc : "<<current_color[1]<<",";
  234.                 current_color[1]+= pow(phong,shine) * co_efficients[2] * color[1];
  235.                 //current_color[1]=current_color[1]+phong*co_efficients[2]*objects[j]->color[1];
  236.                 ///cout<<"cc : "<<current_color[1]<<",  ";
  237.  
  238.  
  239.                 current_color[2]+= lambert*co_efficients[1]*color[2];
  240.                 ///cout<<"cc : "<<current_color[2]<<",";
  241.                 current_color[2]+= pow(phong,shine) * co_efficients[2] * color[2];
  242.                 //current_color[2]=current_color[2]+phong*co_efficients[2]*objects[j]->color[2];
  243.                 ///cout<<"cc : "<<current_color[2]<<","<<endl;
  244.              //cout<<"cc : "<<current_color[0]<<",";
  245.              /*
  246.                 for (int k=0; k<3; k++)
  247.                 {
  248.                 if (current_color[k] > 1)
  249.                 {
  250.                     current_color[k] = 1;
  251.                 }
  252.                 else if (current_color[k] < 0)
  253.                 {
  254.                     current_color[k] = 0;
  255.                 }
  256.                 }
  257.                 */
  258. ///
  259.  
  260.                }
  261.  
  262.                if(level<recursion)
  263.                {
  264.  
  265.  
  266.                     point starting=plusthem(intersectionpoint,reflected_vector);
  267.                     Ray reflectedRay(starting, reflected_vector);
  268.  
  269.                     //if()
  270.                     int nearest=-1;
  271.                     int mint=999999;
  272.                     double dummy_colorat[3];
  273.                     double t;
  274.  
  275.                     for(k=0;k<objects.size();k++)
  276.                     {
  277.                         t=objects[k]->getIntersectingT(reflectedRay);/// eita kemne ki???? pointer -_-
  278.                         if(t<=0)
  279.                         {
  280.                             ///cout<<"t is less than 0 - in recursion"<<endl;
  281.                             continue;
  282.                         }
  283.  
  284.                         if(t<mint)
  285.                         {
  286.                             ///cout<<"I thoutht you are here"<<endl;
  287.                             mint=t;
  288.                             nearest=k;
  289.                         }
  290.                     }
  291.  
  292.                     if(nearest!=-1)
  293.                     {
  294.  
  295.                     //cout<<"here:<<endl; "<<nearest<<objects[nearest]->color[0]<<" color 2 "<<objects[nearest]->color[1]<<endl;
  296.                         ///cout<<"here"<<endl;
  297.                         t =objects[nearest]->intersect(reflectedRay, dummy_colorat, level+1);
  298.                         current_color[0]=current_color[0]+dummy_colorat[0]*co_efficients[3];
  299.                         current_color[1]=current_color[1]+dummy_colorat[1]*co_efficients[3];
  300.                         current_color[2]=current_color[2]+dummy_colorat[2]*co_efficients[3];
  301.                         //image.set_pixel(j,i,dummycolorat[0]*255,dummycolorat[1]*255,dummycolorat[2]*255);
  302.  
  303.                     //image.set_pixel(j,i,objects[nearest]->color[0]*255,objects[nearest]->color[1]*255,objects[nearest]->color[2]*255);
  304.                     }
  305.  
  306.  
  307. ///
  308. /*
  309.  
  310.                     /// refraction
  311.  
  312.                     point startRefraction=plusthem(intersectionpoint, refracted_vector);
  313.                     Ray refractedRay(startRefraction, refracted_vector);
  314.  
  315.                     nearest=-1;
  316.                     mint=999999;
  317.                     double dummy_color_at[3];
  318.                     double tr;
  319.  
  320.                     for(k=0;k<objects.size();k++)
  321.                     {
  322.                         tr=objects[k]->getIntersectingT(refractedRay);
  323.  
  324.                         if(tr<=0)
  325.                         {
  326.                             ///cout<<"t is less than 0 - in recursion"<<endl;
  327.                             continue;
  328.                         }
  329.  
  330.                         if(tr<mint)
  331.                         {
  332.                             ///cout<<"I thoutht you are here"<<endl;
  333.                             mint=tr;
  334.                             nearest=k;
  335.                         }
  336.                     }
  337.  
  338.                     if(nearest!=-1)
  339.                     {
  340.                         tr =objects[nearest]->intersect(refractedRay, dummy_color_at, level+1);
  341.                         current_color[0]=current_color[0]+dummy_color_at[0]*etaki;
  342.                         current_color[1]=current_color[1]+dummy_color_at[1]*etaki;
  343.                         current_color[2]=current_color[2]+dummy_color_at[2]*etaki;
  344.                     }
  345.  
  346.                     */
  347.  
  348.                 //else
  349.                 //{
  350.                     //cout<<" WHAT THE HECK!!!!!!!!!!!!!!"<<endl;
  351.                 //}
  352.                 }
  353.                 for (int k=0; k<3; k++)
  354.             {
  355.                 if (current_color[k]-1>0.00000001)
  356.                 {
  357.                         current_color[k] = 1;
  358.                 }
  359.                 else if (current_color[k]-1>-0.00001)
  360.                 {
  361.                         current_color[k] = 0;
  362.                 }
  363.             }
  364.  
  365.  
  366.  
  367.  
  368.  
  369.         }
  370.  
  371.  
  372.  
  373.  
  374.         return t_min;
  375.     }
  376.  
  377.  
  378. };
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top