/[cvs]/api/Classes/Engine3d/Clipping3d.cpp
ViewVC logotype

Annotation of /api/Classes/Engine3d/Clipping3d.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations)
Sun Jul 1 20:47:58 2001 UTC (22 years, 11 months ago) by bearsoft
Branch point for: lazy, MAIN
Initial revision

1 bearsoft 1.1 #include "clipping3d.h"
2     #include "math.h"
3    
4     Clipping3d::Clipping3d(int iScreenWidth, int iScreenHeight, float iZNear, float iZFar)
5     {
6     zNear=iZNear;
7     zFar=iZFar;
8     screenWidth=iScreenWidth;
9     screenHeight=iScreenHeight;
10     calcPlane(screenWidth,screenHeight);
11    
12     numberOfPolygons=16;
13    
14     tMapareDataList = new ObjectArray<TMapareData>(numberOfPolygons);
15    
16     for ( int i=0; i<numberOfPolygons ; i++)
17     {
18     tMapareDataList->setObject(new TMapareData(),i);
19     }
20     }
21    
22     Clipping3d::~Clipping3d()
23     {
24     if (tMapareDataList != null)
25     {
26     delete tMapareDataList;
27     }
28     }
29    
30     //*********************************************************************
31     //return the cliped polygons
32     //*********************************************************************
33    
34     bool Clipping3d::getClippedData(TPolytri *tPolytri, int step)
35     {
36     bool event=false;
37    
38     TMapareData *tMapareData=tMapareDataList->getObject(step);
39    
40     if ( tMapareData->getexsists() == 1 )
41     {
42    
43     float z1=1/tMapareData->getcz(0);
44     float z2=1/tMapareData->getcz(1);
45     float z3=1/tMapareData->getcz(2);
46    
47     tPolytri->x1=((tMapareData->getcx(0)*screenWidth)*((z1)))+(screenWidth/2);
48     tPolytri->x2=((tMapareData->getcx(1)*screenWidth)*((z2)))+(screenWidth/2);
49     tPolytri->x3=((tMapareData->getcx(2)*screenWidth)*((z3)))+(screenWidth/2);
50    
51     tPolytri->y1=((tMapareData->getcy(0)*screenHeight)*((z1)))+(screenHeight/2);
52     tPolytri->y2=((tMapareData->getcy(1)*screenHeight)*((z2)))+(screenHeight/2);
53     tPolytri->y3=((tMapareData->getcy(2)*screenHeight)*((z3)))+(screenHeight/2);
54    
55     int sant=removePolygon2d(tPolytri);
56    
57     if ( sant == 3 )
58     {
59    
60     tPolytri->z1=tMapareData->getcz(0);
61     tPolytri->z2=tMapareData->getcz(1);
62     tPolytri->z3=tMapareData->getcz(2);
63    
64     tPolytri->u1=tMapareData->getu(0)*256;
65     tPolytri->u2=tMapareData->getu(1)*256;
66     tPolytri->u3=tMapareData->getu(2)*256;
67    
68     tPolytri->v1=tMapareData->getv(0)*256;
69     tPolytri->v2=tMapareData->getv(1)*256;
70     tPolytri->v3=tMapareData->getv(2)*256;
71    
72     event=true;
73     }
74     }
75    
76     return event;
77     }
78    
79     //*********************************************************************
80     //clip against 6 planes
81     //*********************************************************************
82    
83     void Clipping3d::clipPolygonAgainst6Planes(Object3d *object3d, int step)
84     {
85     int pos1=step*3+0;
86     int pos2=step*3+1;
87     int pos3=step*3+2;
88    
89     int position1=object3d->getpoints(pos1);
90     int position2=object3d->getpoints(pos2);
91     int position3=object3d->getpoints(pos3);
92    
93     for ( int ex=0; ex<numberOfPolygons ; ex++ )
94     {
95     TMapareData *tMapareData=tMapareDataList->getObject(ex);
96     tMapareData->setexsists(0);
97     }
98    
99     TMapareData *tMapareData=tMapareDataList->getObject(0);
100    
101     tMapareData->setexsists(1);
102    
103     tMapareData->setcx(object3d->getx(position1),0);
104     tMapareData->setcy(object3d->gety(position1),0);
105     tMapareData->setcz(object3d->getz(position1),0);
106    
107     tMapareData->setcx(object3d->getx(position2),1);
108     tMapareData->setcy(object3d->gety(position2),1);
109     tMapareData->setcz(object3d->getz(position2),1);
110    
111     tMapareData->setcx(object3d->getx(position3),2);
112     tMapareData->setcy(object3d->gety(position3),2);
113     tMapareData->setcz(object3d->getz(position3),2);
114    
115     tMapareData->setu(object3d->getvu(pos1),0);
116     tMapareData->setv(object3d->getvv(pos1),0);
117     tMapareData->setg(object3d->getgouraud(pos1),0);
118    
119     tMapareData->setu(object3d->getvu(pos2),1);
120     tMapareData->setv(object3d->getvv(pos2),1);
121     tMapareData->setg(object3d->getgouraud(pos2),1);
122    
123     tMapareData->setu(object3d->getvu(pos3),2);
124     tMapareData->setv(object3d->getvv(pos3),2);
125     tMapareData->setg(object3d->getgouraud(pos3),2);
126    
127     // clip against front z
128    
129     clipZ(tMapareDataList, zNear, 0, 0);
130    
131     tMapareData->setcliped(0);
132     tMapareData=tMapareDataList->getObject(1);
133     tMapareData->setcliped(0);
134    
135     //clip against back z
136    
137     for ( int ipc=0 ; ipc<numberOfPolygons ; ipc++ )
138     {
139     tMapareData=tMapareDataList->getObject(ipc);
140    
141     if ( tMapareData->getexsists() == 1 && tMapareData->getcliped() == 0)
142     {
143     clipZ(tMapareDataList, zFar, ipc, 1);
144     }
145     }
146    
147     clearSetCliped(tMapareDataList);
148    
149     // clip against xleft
150    
151     float s=xpangs;
152     float c=xpangc;
153    
154     planex=s;
155     planey=0;
156     planez=c;
157     planedist=0;
158    
159    
160     for ( int pc=0 ; pc<numberOfPolygons ; pc++ )
161     {
162     tMapareData=tMapareDataList->getObject(pc);
163    
164     if ( tMapareData->getexsists() == 1 && tMapareData->getcliped() == 0)
165     {
166     clipXY(tMapareDataList, screenWidth, pc);
167     }
168     }
169    
170     // clip against xright
171    
172     clearSetCliped(tMapareDataList);
173    
174     planex=-s;
175    
176     for ( int pc2=0 ; pc2<numberOfPolygons ; pc2++ )
177     {
178     tMapareData=tMapareDataList->getObject(pc2);
179    
180     if ( tMapareData->getexsists() == 1 && tMapareData->getcliped() == 0)
181     {
182     clipXY(tMapareDataList, screenWidth, pc2);
183     }
184     }
185    
186     // clip against ytop
187    
188     clearSetCliped(tMapareDataList);
189    
190     s=ypangs;
191     c=ypangc;
192    
193     planex=0;
194     planey=s;
195     planez=c;
196     planedist=0;
197    
198     for ( int pc3=0 ; pc3<numberOfPolygons ; pc3++ )
199     {
200     tMapareData=tMapareDataList->getObject(pc3);
201    
202     if ( tMapareData->getexsists() == 1 && tMapareData->getcliped() == 0)
203     {
204     clipXY(tMapareDataList, screenWidth, pc3);
205     }
206     }
207    
208     // clip against ybottom
209    
210     clearSetCliped(tMapareDataList);
211     planey=-s;
212    
213     for ( int pc4=0 ; pc4<numberOfPolygons ; pc4++ )
214     {
215     tMapareData=tMapareDataList->getObject(pc4);
216    
217     if ( tMapareData->getexsists() == 1 && tMapareData->getcliped() == 0)
218     {
219     clipXY(tMapareDataList, screenWidth, pc4);
220     }
221     }
222    
223     // removepolygon(tmapare_);
224    
225     }
226    
227     //*********************************************************************
228     //reset all clip polygons
229     //*********************************************************************
230    
231     void Clipping3d::clearSetCliped(ObjectArray<TMapareData> *tMapareDataList)
232     {
233     for ( int ex=0; ex<numberOfPolygons ; ex++ )
234     {
235     TMapareData *tMapareData=tMapareDataList->getObject(ex);
236     tMapareData->setcliped(0);
237     }
238     }
239    
240     //*********************************************************************
241     //calc x,y clip planes
242     //*********************************************************************
243    
244     void Clipping3d::calcPlane(int screenWidth, int screenHeight)
245     {
246     float xsize=(float)screenWidth;
247    
248     float ysize=(float)screenHeight;
249    
250     float xpang=(float)atan(2.0f/2.0f*((xsize))/(((xsize-2)*0.5f)-1.0f));
251    
252     float ypang=(float)atan(2.0f/2.0f*((ysize))/(((ysize-1)*0.5f)-1.0f));
253    
254     xpangs=(float)sin(xpang);
255    
256     xpangc=(float)cos(xpang);
257    
258     ypangs=(float)sin(ypang);
259    
260     ypangc=(float)cos(ypang);
261     }
262    
263     //*********************************************************************
264     //remove polygons that is not visibly
265     //*********************************************************************
266    
267     int Clipping3d::removePolygon2d(TPolytri *tPolytri)
268     {
269     if (tPolytri->x1 >= (screenWidth-1) )
270     {
271     tPolytri->x1=(float)(screenWidth-1);
272     }
273    
274     if (tPolytri->x2 >= (screenWidth-1) )
275     {
276     tPolytri->x2=(float)(screenWidth-1);
277     }
278    
279     if (tPolytri->x3 >= (screenWidth-1) )
280     {
281     tPolytri->x3=(float)(screenWidth-1);
282     }
283    
284     if (tPolytri->y1 >= (screenHeight-1) )
285     {
286     tPolytri->y1=(float)(screenHeight-1);
287     }
288    
289     if (tPolytri->y2 >= (screenHeight-1) )
290     {
291     tPolytri->y2=(float)(screenHeight-1);
292     }
293    
294     if (tPolytri->y3 >= (screenHeight-1) )
295     {
296     tPolytri->y3=(float)(screenHeight-1);
297     }
298    
299     if (tPolytri->x1 < 1 )
300     {
301     tPolytri->x1=1;
302     }
303    
304     if (tPolytri->x2 < 1 )
305     {
306     tPolytri->x2=1;
307     }
308    
309     if (tPolytri->x3 < 1 )
310     {
311     tPolytri->x3=1;
312     }
313    
314     if (tPolytri->y1 < 1 )
315     {
316     tPolytri->y1=1;
317     }
318    
319     if (tPolytri->y2 < 1 )
320     {
321     tPolytri->y2=1;
322     }
323    
324     if (tPolytri->y3 < 1 )
325     {
326     tPolytri->y3=1;
327     }
328    
329     int sant=0;
330    
331     if ( tPolytri->x1 >= 1 && tPolytri->x1 < screenWidth && tPolytri->y1 >= 1 && tPolytri->y1 < screenHeight )
332     {
333     sant++;
334     }
335    
336     if ( tPolytri->x2 >= 1 && tPolytri->x2 < screenWidth && tPolytri->y2 >= 1 && tPolytri->y2 < screenHeight )
337     {
338     sant++;
339     }
340    
341     if ( tPolytri->x3 >= 1 && tPolytri->x3 < screenWidth && tPolytri->y3 >= 1 && tPolytri->y3 < screenHeight )
342     {
343     sant++;
344     }
345    
346     return sant;
347     }
348    
349     void Clipping3d::removePolygon(ObjectArray<TMapareData> *tMapareDataList )
350     {
351     for ( int ex=0; ex<numberOfPolygons ; ex++ )
352     {
353     TMapareData *tMapareData=((TMapareData*)tMapareDataList->getObject(ex));
354    
355     if ( tMapareData->getexsists() == 1 )
356     {
357     if (removePolygonXY(tMapareData) != 0)
358     {
359     tMapareData->setexsists(0);
360     }
361     }
362     }
363     }
364    
365     int Clipping3d::removePolygon(TMapareData *tMapareData)
366     {
367     int ex=0;
368    
369     for ( int cp=0; cp<3; cp++ )
370     {
371     tMapareData->curdot[cp]=(tMapareData->getcx(cp)*planex)+(tMapareData->getcy(cp)*planey)+(tMapareData->getcz(cp)*planez);
372     }
373    
374     for ( int cp2=0; cp2<3 ;cp2++ )
375     {
376     if ( tMapareData->curdot[cp2]+0.1f < planedist )
377     {
378     ex++;
379     }
380     }
381    
382     return ex;
383     }
384    
385     int Clipping3d::removePolygonXY(TMapareData *tMapareData)
386     {
387     int ex=0;
388    
389     float s=xpangs;
390     float c=xpangc;
391    
392     planex=s;
393     planey=0;
394     planez=c;
395     planedist=0;
396    
397     ex+=removePolygon(tMapareData);
398    
399     planex=-s;
400    
401     ex+=removePolygon(tMapareData);
402    
403     s=ypangs;
404     c=ypangc;
405    
406     planex=0;
407     planey=s;
408     planez=c;
409     planedist=0;
410    
411     ex+=removePolygon(tMapareData);
412     planey=-s;
413    
414     ex+=removePolygon(tMapareData);
415    
416     return ex;
417     }
418    
419     //*********************************************************************
420     //clip against x,y
421     //*********************************************************************
422    
423     void Clipping3d::clipXY(ObjectArray<TMapareData> *tMapareDataList , int screenwidth, int pc)
424     {
425     TMapareData *tMapareData=tMapareDataList->getObject(pc);
426    
427     for ( int cp=0; cp<3; cp++ )
428     {
429     tMapareData->curdot[cp]=(tMapareData->getcx(cp)*planex)+(tMapareData->getcy(cp)*planey)+(tMapareData->getcz(cp)*planez);
430     }
431    
432     float x=0;
433     int ap=0;
434     int position[4]={0,0,0,0};
435     int r=1;
436    
437     for ( int pp=0; pp<3 ; pp++ )
438     {
439     if ( tMapareData->curdot[pp] >= planedist )
440     {
441     position[0]=pp;
442     ap++;
443     }
444     else
445     {
446     position[r]=pp;
447     r++;
448     }
449     }
450    
451     if ( ap == 1 )
452     {
453     int n=0;
454     int k=1;
455    
456     float f=((tMapareData->curdot[position[k]])/(tMapareData->curdot[position[n]]-tMapareData->curdot[position[k]]));
457     interpolateClipXY(tMapareData, f , k, n, position,x);
458    
459     n=0;
460     k=2;
461    
462     f=((tMapareData->curdot[position[k]])/(tMapareData->curdot[position[n]]-tMapareData->curdot[position[k]]));
463     interpolateClipXY(tMapareData, f , k, n, position,x);
464     }
465    
466     ap=0;
467     r=1;
468    
469     for ( int pp2=0; pp2<3 ; pp2++ )
470     {
471     if ( tMapareData->curdot[pp2] < planedist )
472     {
473     position[0]=pp2;
474     ap++;
475     }
476     else
477     {
478     position[r]=pp2;
479     r++;
480     }
481     }
482    
483     if ( ap == 1 )
484     {
485     int pc2=newPolygonClipXY(tMapareDataList,pc);
486     TMapareData *tMapareData2=((TMapareData*)tMapareDataList->getObject(pc2));
487    
488     int n=1;
489     int k=0;
490    
491     float f=((tMapareData->curdot[position[k]])/(tMapareData->curdot[position[n]]-tMapareData->curdot[position[k]]));
492     interpolateClipXY(tMapareData, f , k, n, position,x);
493    
494     n=2;
495     k=0;
496    
497     f=((tMapareData2->curdot[position[k]]-planedist)/(tMapareData2->curdot[position[n]]-tMapareData2->curdot[position[k]]));
498     interpolateClipXY(tMapareData2, f , k, n, position,x);
499    
500     copyPolygonPointClipXY(tMapareData2, tMapareData, position[1], position[0]);
501     }
502     }
503    
504     //*********************************************************************
505     // interpolate x,y,z,u,v,g value against the x,y clip plane
506     //*********************************************************************
507    
508     void Clipping3d::interpolateClipXY(TMapareData *tMapareData, float f , int k, int n, int *position, float x)
509     {
510     if ( f < 0 )
511     {
512     f*=-1;
513     }
514    
515     float z=tMapareData->getcz(position[n]);
516     float z2=tMapareData->getcz(position[k]);
517    
518     float xs=tMapareData->getcx(position[n])-tMapareData->getcx(position[k]);
519     float ys=tMapareData->getcy(position[n])-tMapareData->getcy(position[k]);
520     float zs=z-z2;
521     float us=tMapareData->getu(position[n])-tMapareData->getu(position[k]);
522     float vs=tMapareData->getv(position[n])-tMapareData->getv(position[k]);
523     float gs=tMapareData->getg(position[n])-tMapareData->getg(position[k]);
524    
525     tMapareData->setcx(tMapareData->getcx(position[k])+(f*(xs)),position[k]);
526     tMapareData->setcy(tMapareData->getcy(position[k])+(f*(ys)),position[k]);
527     z2+=(f*(zs));
528     tMapareData->setcz(z2,position[k]);
529     tMapareData->setu(tMapareData->getu(position[k])+((f)*(us)),position[k]);
530     tMapareData->setv(tMapareData->getv(position[k])+((f)*(vs)),position[k]);
531     tMapareData->setg(tMapareData->getg(position[k])+((f)*(gs)),position[k]);
532     }
533    
534     //*********************************************************************
535     //create a new polygon
536     //*********************************************************************
537    
538     int Clipping3d::newPolygonClipXY(ObjectArray<TMapareData> *tMapareDataList, int e )
539     {
540     int t=0;
541     int end=0;
542     int tempt;
543    
544     while ( t < numberOfPolygons && end == 0)
545     {
546     TMapareData *tMapareData=tMapareDataList->getObject(t);
547    
548     if ( tMapareData->getexsists() == 0 )
549     {
550     tMapareData->setexsists(1);
551     tMapareData->setcliped(1);
552     end=1;
553     tempt=t;
554     }
555    
556     t++;
557     }
558    
559     t=tempt;
560    
561     TMapareData *tMapareData=tMapareDataList->getObject(t);
562     TMapareData *tMapareData2=tMapareDataList->getObject(e);
563    
564     for ( int i=0 ; i<3 ; i++ )
565     {
566     tMapareData->setcx(tMapareData2->getcx(i),i);
567     tMapareData->setcy(tMapareData2->getcy(i),i);
568     tMapareData->setcz(tMapareData2->getcz(i),i);
569     tMapareData->setu(tMapareData2->getu(i),i);
570     tMapareData->setv(tMapareData2->getv(i),i);
571     tMapareData->setg(tMapareData2->getg(i),i);
572     tMapareData->curdot[i]=tMapareData2->curdot[i];
573     }
574    
575     return t;
576     }
577    
578     //*********************************************************************
579     //copy clipxy polygon
580     //*********************************************************************
581    
582     void Clipping3d::copyPolygonPointClipXY(TMapareData *tMapareData, TMapareData *tMapareData2, int i, int i2)
583     {
584     tMapareData->setcx(tMapareData2->getcx(i2),i);
585     tMapareData->setcy(tMapareData2->getcy(i2),i);
586     tMapareData->setcz(tMapareData2->getcz(i2),i);
587     tMapareData->setu(tMapareData2->getu(i2),i);
588     tMapareData->setv(tMapareData2->getv(i2),i);
589     tMapareData->setg(tMapareData2->getg(i2),i);
590     tMapareData->curdot[i]=tMapareData2->curdot[i2];
591     }
592    
593     //*********************************************************************
594     //clip against z
595     //*********************************************************************
596    
597     void Clipping3d::clipZ(ObjectArray<TMapareData> *tMapareDataList, float zNearOrFar, int pc , int choise)
598     {
599     int ap=0;
600     int position[4]={0,0,0,0};
601     int r=1;
602     TMapareData *tMapareData=tMapareDataList->getObject(pc);
603    
604     if ( choise == 0 )
605     {
606     for ( int pp=0; pp<3 ; pp++ )
607     {
608     if (tMapareData->getcz(pp) >= zNearOrFar)
609     {
610     position[0]=pp;
611     ap++;
612     }
613     else
614     {
615     position[r]=pp;
616     r++;
617     }
618     }
619     }
620     else
621     {
622     for ( int pp=0; pp<3 ; pp++ )
623     {
624    
625     if ( zNearOrFar >= tMapareData->getcz(pp) )
626     {
627     position[0]=pp;
628     ap++;
629     }
630     else
631     {
632     position[r]=pp;
633     r++;
634     }
635     }
636     }
637    
638     if ( ap == 1 )
639     {
640     int n;
641     int k;
642    
643     n=0;
644     k=1;
645    
646     float z=tMapareData->getcz(position[k]);
647     float z2=tMapareData->getcz(position[n]);
648    
649     z2=z2-z;
650     float tempzc=zNearOrFar;
651     tempzc-=z;
652     tempzc/=z2;
653    
654     calcClipZ(tMapareDataList, zNearOrFar, pc , k, n, position, tempzc);
655    
656     n=0;
657     k=2;
658    
659     z=tMapareData->getcz(position[k]);
660     z2=tMapareData->getcz(position[n]);
661    
662     z2=z2-z;
663     tempzc=zNearOrFar;
664     tempzc-=z;
665     tempzc/=z2;
666    
667     calcClipZ(tMapareDataList, zNearOrFar, pc , k, n, position, tempzc);
668     }
669    
670    
671     ap=0;
672     r=1;
673    
674     if ( choise == 0 )
675     {
676     for ( int pp2=0; pp2<3 ; pp2++ )
677     {
678     if ( tMapareData->getcz(pp2) < zNearOrFar )
679     {
680     position[0]=pp2;
681     ap++;
682     }
683     else
684     {
685     position[r]=pp2;
686     r++;
687     }
688     }
689     }
690     else
691     {
692     for ( int pp2=0; pp2<3 ; pp2++ )
693     {
694     if ( zNearOrFar < tMapareData->getcz(pp2) )
695     {
696     position[0]=pp2;
697     ap++;
698     }
699     else
700     {
701     position[r]=pp2;
702     r++;
703     }
704     }
705     }
706    
707     if ( ap == 1 )
708     {
709     int pc2=newPolygonClipZ(tMapareDataList,pc);
710     TMapareData *tMapareData2=tMapareDataList->getObject(pc2);
711    
712     int n;
713     int k;
714    
715     n=1;
716     k=0;
717    
718     float z=tMapareData->getcz(position[k]);
719     float z2=tMapareData->getcz(position[n]);
720    
721     z2=z2-z;
722     float tempzc=zNearOrFar;
723     tempzc-=z;
724     tempzc/=z2;
725    
726     calcClipZ(tMapareDataList, zNearOrFar, pc , k, n, position, tempzc);
727    
728     n=2;
729     k=0;
730    
731     z=tMapareData2->getcz(position[k]);
732     z2=tMapareData2->getcz(position[n]);
733    
734     z2=z2-z;
735     tempzc=zNearOrFar;
736     tempzc-=z;
737     tempzc/=z2;
738    
739     calcClipZ(tMapareDataList, zNearOrFar, pc2 , k, n, position, tempzc);
740    
741     copyPolygonPointClipZ(tMapareData2, tMapareData, position[1], position[0]);
742     }
743     }
744    
745     //*********************************************************************
746     //calc interpolation z
747     //*********************************************************************
748    
749     void Clipping3d::calcClipZ(ObjectArray<TMapareData> *tMapareDataList, float zNearOrFar, int pc , int k, int n, int *position, float tempzc)
750     {
751     TMapareData *tMapareData=tMapareDataList->getObject(pc);
752    
753     tMapareData->setcx(interpolateClipZ(tMapareData->getcx(position[k]),tMapareData->getcx(position[n]),tempzc),position[k]);
754     tMapareData->setcy(interpolateClipZ(tMapareData->getcy(position[k]),tMapareData->getcy(position[n]),tempzc),position[k]);
755     tMapareData->setcz(zNearOrFar,position[k]);
756     tMapareData->setu(interpolateClipZ(tMapareData->getu(position[k]),tMapareData->getu(position[n]),tempzc),position[k]);
757     tMapareData->setv(interpolateClipZ(tMapareData->getv(position[k]),tMapareData->getv(position[n]),tempzc),position[k]);
758     tMapareData->setg(interpolateClipZ(tMapareData->getg(position[k]),tMapareData->getg(position[n]),tempzc),position[k]);
759     }
760    
761     //*********************************************************************
762     //clip against z
763     //*********************************************************************
764    
765     int Clipping3d::newPolygonClipZ(ObjectArray<TMapareData> *tMapareDataList, int e )
766     {
767     int t=0;
768     int end=0;
769     int tempt;
770    
771     while ( t < numberOfPolygons && end == 0)
772     {
773     TMapareData *tMapareData=tMapareDataList->getObject(t);
774    
775     if ( tMapareData->getexsists() == 0 )
776     {
777     tMapareData->setexsists(1);
778     tMapareData->setcliped(1);
779     end=1;
780     tempt=t;
781     }
782    
783     t++;
784     }
785    
786     t=tempt;
787    
788     TMapareData *tMapareData=tMapareDataList->getObject(t);
789     TMapareData *tMapareData2=tMapareDataList->getObject(e);
790    
791     for ( int i=0 ; i<3 ; i++ )
792     {
793     tMapareData->setcx(tMapareData2->getcx(i),i);
794     tMapareData->setcy(tMapareData2->getcy(i),i);
795     tMapareData->setcz(tMapareData2->getcz(i),i);
796     tMapareData->setu(tMapareData2->getu(i),i);
797     tMapareData->setv(tMapareData2->getv(i),i);
798     tMapareData->setg(tMapareData2->getg(i),i);
799     tMapareData->curdot[i]=tMapareData2->curdot[i];
800     }
801    
802     return t;
803     }
804    
805     //*********************************************************************
806     //interpolate z
807     //*********************************************************************
808    
809     float Clipping3d::interpolateClipZ(float temp, float temp2, float d7f)
810     {
811     temp2=(temp2-temp)*d7f;
812     temp2+=temp;
813     return temp2;
814     }
815    
816     //*********************************************************************
817     //copy z polygonpoint
818     //*********************************************************************
819    
820     void Clipping3d::copyPolygonPointClipZ(TMapareData *tMapareData, TMapareData *tMapareData2, int i, int i2)
821     {
822     tMapareData->setcx(tMapareData2->getcx(i2),i);
823     tMapareData->setcy(tMapareData2->getcy(i2),i);
824     tMapareData->setcz(tMapareData2->getcz(i2),i);
825     tMapareData->setu(tMapareData2->getu(i2),i);
826     tMapareData->setv(tMapareData2->getv(i2),i);
827     tMapareData->setg(tMapareData2->getg(i2),i);
828     tMapareData->curdot[i]=tMapareData2->curdot[i2];
829     }

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26