- // p0, p1, p2: triangle tesselation
- void TriangleTesselation(CVector &p0, CVector &p1, CVector &p2, int nTesselation)
- {
- CVector dv1 = (p2 - p0) / nTesselation;
- CVector dv2 = (p2 - p1) / nTesselation;
- for (int j=0; j<nTesselation; j++)
- {
- CVector x1 = p0 + j*dv1;
- CVector x2 = p0 + (j+1)*dv1;
- CVector dx1 = ((p1-p0) + (dv2-dv1)*j);
- CVector dx2 = ((p1-p0) + (dv2-dv1)*(j+1));
- glBegin(GL_TRIANGLE_STRIP);
- for (int i=0; i<nTesselation-j; i++)
- {
- CVector u1 = x1 + ((float) i / (nTesselation-j))*dx1;
- CVector u2 = x2;
- if (nTesselation-j-1 != 0)
- u2 += ((float) i / (nTesselation-j-1))*dx2;
- glVertex3fv(u1.arr);
- glVertex3fv(u2.arr);
- }
- glVertex3fv((x1+dx1).arr);
- glEnd();
- }
- }