• API
• FAQ
• Tools
• Archive
daily pastebin goal
61%
SHARE
TWEET

# Untitled

a guest Jul 21st, 2018 60 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.

Top